2014-12-10 3 views
3

я создал простую функцию:F #: по умолчанию параметр Функция OBJ в классе

let myGenericFunc abc = printfn "%A" abc 

его тип:

'a -> unit 

Тогда я хочу, чтобы сделать его член класса:

type MyClass() = 
    member x.Func = myGenericFunc 

Однако тип "Func" теперь

obj -> unit 

Кроме того: Если я параметр явно, все нормально снова:

type MyClass() = 
    // Func : 'a -> unit 
    member x.Func y = myGenericFunc y 

Возникает вопрос: что происходит?!

ответ

7

Ваш первый x.Func определяет свойство, а не метод, и поскольку свойства не могут быть общими, он должен использовать конкретный тип для 'a.

Когда вы определяете x.Func y, вы создаете метод, который может быть общим.

+0

Имеет смысл - спасибо! –