F# 为什么这些作业会产生不同的结果?

F# 为什么这些作业会产生不同的结果?,f#,F#,为什么 将产生 let ab a b = a 5 + b let ab2 a b = a 5 +b 及 将产生 let ab a b = a 5 + b let ab2 a b = a 5 +b 为什么“+”和“b”之间的这个空格会造成这种差异?这完全取决于解析器如何优先考虑不同的语法选项以避免歧义 +既是二进制加法运算符又是一元“正”1运算符5+b是两个参数相加的应用;但是+b是应用于某些符号b的正运算符 因此 解析为: let ab a b = a 5 + b let ab2 a

为什么

将产生

let ab a b = a 5 + b
let ab2 a b = a 5 +b

将产生

let ab a b = a 5 + b
let ab2 a b = a 5 +b

为什么“+”和“b”之间的这个空格会造成这种差异?

这完全取决于解析器如何优先考虑不同的语法选项以避免歧义

+
既是二进制加法运算符又是一元“正”1运算符<因此,代码>5+b是两个参数相加的应用;但是
+b
是应用于某些符号
b
的正运算符

因此

解析为:

let ab a b = a 5 + b
let ab2 a b = a 5 +b
a
是一个整数参数的函数,返回一个int,因此可以将其添加到
b
;但是

解析为:

let ab a b = a 5 + b
let ab2 a b = a 5 +b
a
是两个参数的函数,无法推断它返回的类型


1我手头没有F#运算符列表,因此无法检查正确的名称。编辑:似乎我记不清了::-)。

在表达式
+b
中,
+
被解释为(仅以
b
为参数)。