Function lambda表达式到Func的转换
鉴于以下情况:Function lambda表达式到Func的转换,function,lambda,f#,func,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表达式到Funcs的隐式转换,而不提供从函数的隐式转换?欢迎指向文档的指针,在这里我可以阅读这里发生的事情。:-) 本规范的(相当复杂的)章节中介绍了这一点。引用后者的话: 如方法应用
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
s的隐式转换,而不提供从函数的隐式转换?欢迎指向文档的指针,在这里我可以阅读这里发生的事情。:-) 本规范的(相当复杂的)章节中介绍了这一点。引用后者的话:
如方法应用解决方案(见§14.4)所述,两个
类型定向转换应用于方法调用
第一个类型定向转换转换匿名函数
委托类型的表达式和其他函数值参数。
鉴于:
- 委托类型D的形式参数
- 已知类型ty1->…->的实际参数fargtyn->rty
- 委托类型D的
方法正好有n个参数Invoke
- 该参数被解释为已写入:
D(new
arg1…argn->farg arg1…argn)fun
- 委托类型D的形式参数
- 已知类型ty1->…->的实际参数fargtyn->rty
- 委托类型D的
方法正好有n个参数Invoke
- 该参数被解释为已写入:
D(new
arg1…argn->farg arg1…argn)fun
这似乎表明此转换将应用于任何函数值,但观察表明它仅适用于匿名函数。当然。我刚意识到我把最后一部分删掉了。修好了,丹尼尔,检查一下。将F#函数传递给某些方法确实有效。我刚意识到我把最后一部分删掉了。修好了,丹尼尔,检查一下。将F#函数传递给某些方法确实有效。