F#:函数参数默认为类中的obj

Alo*_*zcz 3 generics f# type-inference

我创建了一个简单的函数:

let myGenericFunc abc = printfn "%A" abc
Run Code Online (Sandbox Code Playgroud)

它的类型是:

'a -> unit
Run Code Online (Sandbox Code Playgroud)

然后我想让它成为一个类的成员:

type MyClass() =
    member x.Func = myGenericFunc
Run Code Online (Sandbox Code Playgroud)

但是,现在是"Func"的类型

obj -> unit
Run Code Online (Sandbox Code Playgroud)

而且:如果我将参数设为显式,那么一切都可以了:

type MyClass() =
    // Func : 'a -> unit
    member x.Func y = myGenericFunc y
Run Code Online (Sandbox Code Playgroud)

问题是:会发生什么?!

Lea*_*and 7

您的第一个x.Func是定义属性,而不是方法,因为属性不能是通用的,它必须使用具体类型'a.

定义时,x.Func y您正在创建一个方法,并且可以是通用的.