我最近一直在努力学习F#并且来自面向对象的背景,在这种情况下我对理解泛型有一点问题。
我们说我有以下功能:
let genericFunction<'a> (x: 'a) =
()
let myFunction (fn: ('a -> unit)) =
fn 2
fn 2UL
let test =
myFunction genericFunction
作为一名C#开发人员,我希望fn
是一个通用函数,可以接受任何参数。但fn 2
调用将通用参数'a
限制为int
,因此无法使用uint64
调用它。
为什么泛型类型受到限制?如何在不传递两个函数的情况下实现这一点?
编译器警告约束和最终错误:
source_file.fs(5,8): warning FS0064: This construct causes code to be less generic than indicated by the type annotations. The type variable 'a has been constrained to be type 'int'.
source_file.fs(6,8): error FS0001: This expression was expected to have type
int
but here has type
uint64