内联

内联允许你使用函数体替换对函数的调用。

这有时对于代码关键部分的性能原因很有用。但是对应的是你的程序集会占用很多空间,因为函数体在调用发生的每个地方都是重复的。在决定是否内联函数时必须小心。

可以使用 inline 关键字内联函数:

// inline indicate that we want to replace each call to sayHello with the body 
// of the function
let inline sayHello s1 =
    sprintf "Hello %s" s1

// Call to sayHello will be replaced with the body of the function
let s = sayHello "Foo"
// After inlining -> 
// let s = sprintf "Hello %s" "Foo"

printfn "%s" s
// Output
// "Hello Foo"

具有本地价值的另一个例子

let inline addAndMulti num1 num2 =
    let add = num1 + num2
    add * 2

let i = addAndMulti 2 2
// After inlining ->
// let add = 2 + 2
// let i = add * 2

printfn "%i" i
// Output
// 8