F# News 的这篇文章指出 F# 可以内联作为参数传递的函数。总是这样吗?它会自动发生吗?
问问题
427 次
2 回答
3
答案是不。如果您有类似以下的函数,则 lambdas 不会内联。在以下代码中,使用FSharpFunc<,>.InvokeFast()
let fold f s l =
let rec loop acc l =
match l with []->acc |h::t->loop (f acc h) t
loop s l
let list = [1;2;3;4]
list|>fold (fun acc x->x+acc) 0|>printfn "%d"
list|>fold (fun acc x->x*acc) 1|>printfn "%d"
但是,如果您将fold
功能标记为inline
情况变化。不仅fold
函数被内联,而且 lambdas 也被内联。我使用 .NET Reflector 来确认这一点。
于 2012-05-04T16:21:51.197 回答
2
我不知道编译器对高阶函数做了哪些优化,但是这篇文章似乎指的是明确标记的类型泛化函数inline
。这是为了支持静态解析的类型参数。
于 2011-06-23T19:02:04.543 回答