这有效:
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)
这种相当恼人的不一致的原因是什么?
答案 0 :(得分:11)
此行为由F# spec的第8.13.7节(成员调用中的类型导向转换)涵盖,其中声明:
注意:这些类型定向转换主要用于 与现有基于成员的.NET库的互操作性,而不是 应用于模块中定义的函数的调用或本地绑定 在表达式中。