我有三个应该是平等的功能:
let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1)
为什么这些方法的类型不同?
add1和add3是 int -> int
,但add2是 (int -> int)
。
它们都按预期工作,我只是好奇为什么FSI以不同的方式呈现它们?
我有三个应该是平等的功能:
let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1)
为什么这些方法的类型不同?
add1和add3是 int -> int
,但add2是 (int -> int)
。
它们都按预期工作,我只是好奇为什么FSI以不同的方式呈现它们?
这通常是一个不重要的区别,但如果你真的很好奇,请参阅 价值的Arity一致性 F#规格的一部分。
我的快速总结就是这样 (int -> int)
是一个超集 int -> int
。以来 add1
和 add3
是语法函数,推断它们具有更具体的类型 int -> int
,而 add2
是一个函数值,因此推断出具有该类型 (int -> int)
(并不能被视为一个 int -> int
)。
这通常是一个不重要的区别,但如果你真的很好奇,请参阅 价值的Arity一致性 F#规格的一部分。
我的快速总结就是这样 (int -> int)
是一个超集 int -> int
。以来 add1
和 add3
是语法函数,推断它们具有更具体的类型 int -> int
,而 add2
是一个函数值,因此推断出具有该类型 (int -> int)
(并不能被视为一个 int -> int
)。