在F#中,为什么我的add函数不添加两个浮点数
let add a b = a+b
(add 3 4) //returns 7
(add 3.5 5.5) //error
Run Code Online (Sandbox Code Playgroud)
还请解释F#中的类型推断是如何工作的.
谢谢.
你必须使它内联.
let inline add a b = a+b
Run Code Online (Sandbox Code Playgroud)
问题是+内联运算符,所以如果你的函数add不是内联的,它将采用int的默认重载.
看看这个答案在F#中使用`inline`
当函数声明为内联时,类型推断将推断静态类型约束.
val inline add :
^a -> ^b -> ^c
when ( ^a or ^b) : (static member ( + ) : ^a * ^b -> ^c)
Run Code Online (Sandbox Code Playgroud)
所以现在a和b可以是用该签名实现静态成员(+)的任何类型.