我输入以下代码,扩展名为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
在F#表达式中被视为c
。
答案 0 :(得分:4)
是的,你的假设是正确的:没有空格的术语前面的加号被视为一元运算符,而不是二元运算符。顺便说一下,减号会发生同样的情况。
确定之后,只有一种方法可以解释其余部分:b +c
必须是函数b
对参数+c
的应用,因此b
必须是需要int
的函数。此应用程序的结果用作分区中的分母,因此它也必须具有类型int
。因此,b
必须为int -> int
。