F#中的类型推断

ris*_*p89 3 f# type-inference

在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#中的类型推断是如何工作的.

谢谢.

Gus*_*Gus 7

你必须使它内联.

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可以是用该签名实现静态成员(+)的任何类型.