我用扩展名Ionide-fsharp输入了以下代码,其类型为 int -> int -> int -> int
let test a b c = a / b + c
但是,如果我之前删除空格 c
let test a b c = a / b +c let test a b c = a/b +c
类型变为int -> (int -> int) -> int -> int
?
但是,以下表达式将获得原始类型。
let test a b c = a/b+c
Visual Studio得到了相同的结果。似乎+c
被视为c
在F#表达式中。
是的,您的假设是正确的:术语前面没有空格的加号被视为一元运算符,而不是二进制运算符。顺便说一句,减号也会发生同样的情况。
确定后,只有一种方法可以解释其余部分:b +c
必须是函数b
对参数的应用+c
,因此b
必须是采用的函数int
。此应用程序的结果在除法中用作分母,因此它也必须具有类型int
。因此,b
必须是int -> int
。