将lambda表达式转换为Func

时间:2014-04-23 03:07:10

标签: function lambda f# func

鉴于以下内容:

open System.Linq

let seqA = { 1..10 }

这有效:

seqA.All (fun n -> n > 0)

然而,这不是:

let abc = fun n -> n > 0

seqA.All (abc)

为什么F#提供从lambda表达式到Func的隐式转换,而不是函数?我可以阅读文档的指示,我可以在这里阅读这里发生的事情。 : - )

1 个答案:

答案 0 :(得分:4)

Method Resolution上的规范的(相关参与的)部分以及Type-directed Conversions at Member Invocations中的内容再次介绍了这一点。引用后者:

  

Method Application Resolution (见§14.4)中所述,两个   在方法调用中应用了类型定向的转换。

     

第一个类型导向转换转换匿名函数   委托类型的表达式和其他函数值参数。   给出:

     
      
  • 委托类型的正式参数 D
  •   
  • 已知类型的实际参数 farg ty 1 - > ... - > ty n - > RTY
  •   
  • 委托类型 D 的<{1}}方法的 n 参数
  •   
     

然后:

     
      
  • 该参数被解释为如果写入:
      Invoke D new arg 1 ... arg n - &gt; farg arg 1 ... arg n
  •   

似乎暗示此转换将应用于任何函数值,但观察表明它仅适用于匿名函数。