为什么我只能在成员方法中将F#函数传递给System.Func参数?

时间:2016-02-25 20:09:43

标签: function f#

这有效:

type MyType () =
    static member MyFn (fn : Func<bool>) = fn.Invoke ()

MyType.MyFn (fun _ -> false)

这不是(错误FS0002):

let myFn (fn : Func<bool>) = fn.Invoke ()

myFn (fun _ -> false)

这两者都没有(错误FS0002):

type MyDU = Fn of Func<bool>

Fn (fun _ -> false)

这种相当恼人的不一致的原因是什么?

1 个答案:

答案 0 :(得分:11)

此行为由F# spec的第8.13.7节(成员调用中的类型导向转换)涵盖,其中声明:

  

注意:这些类型定向转换主要用于   与现有基于成员的.NET库的互操作性,而不是   应用于模块中定义的函数的调用或本地绑定   在表达式中。