将泛型函数作为参数

时间:2017-09-15 19:26:27

标签: generics f# f#-4.1

我最近一直在努力学习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    

这是错误: http://rextester.com/RRRWTR28520

0 个答案:

没有答案