空间能改变数据类型吗?

4

我使用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获得了相同的结果。在F#表达式中,+c似乎被视为c


1
“-c”是什么意思?现在理解了吗?想一下“c”,以及“+c”的语法糖,“-c”没有语法糖,因为这会产生歧义。 - Guy Coder
1个回答

5
是的,您的假设是正确的:一个没有空格的加号被视为一元运算符,而不是二元运算符。顺便说一下,减号也会发生同样的情况。
在确定了这一点之后,只有一种方式来解释剩下的部分:b +c必须是将参数+c应用到函数b中,因此b必须是一个接受int的函数。这个应用的结果被用作除数,因此它也必须具有int类型。因此,b必须是int -> int

很容易不小心删除空格。而且a+b,a * b会增加混淆。如果需要一元运算符,我更喜欢使用a (+b)。 - ca9163d9
1
当然,这很容易,但编译器会立即捕捉到它。 - Fyodor Soikin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接