空间改变了类型?

时间:2017-01-10 17:51:13

标签: f#

我输入以下代码,扩展名为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

1 个答案:

答案 0 :(得分:4)

是的,你的假设是正确的:没有空格的术语前面的加号被视为一元运算符,而不是二元运算符。顺便说一下,减号会发生同样的情况。

确定之后,只有一种方法可以解释其余部分:b +c必须是函数b对参数+c的应用,因此b必须是需要int的函数。此应用程序的结果用作分区中的分母,因此它也必须具有类型int。因此,b必须为int -> int