我正在学习f#,我知道你在调用函数时不需要使用括号。
实施例
let addOne arg1 =
arg1 + 1
addOne 1
VS
this.GetType()
为什么我必须在第二个函数上使用括号?
答案 0 :(得分:10)
在使用.NET库和使用F#库时,参数之间存在一些不匹配,但您通常可以将()
视为括号,而是{{1}的特殊值。 1}}这意味着"没有有用的信息"。
这意味着当你说:
unit
您正在使用值 - 数字1 - 调用addOne 1
作为参数。现在,当您将相同的读数应用于第二个示例时:
addOne
您可以将其视为使用值调用this.GetType()
- 特殊this.GetType
单位值作为参数。如果你想保持一致,你也可以用空格写这个:
()
实际上,大多数人在调用.NET库时都会省略空间。当你不写空间时,F#也支持方法链接,所以你可以写例如this.GetType ()
。
许多采用多个参数的F#函数将使用" curried" form,表示参数需要用空格分隔。例如:
foo().bar()
这里,您需要围绕第二个表达式使用括号,以便编译器知道如何解析代码。这与典型的.NET方法形成对比,后者将参数作为元组。 F#元组写为let add a b = a + b
let mul a b = a * b
add 10 (mul 20 3)
,因此您可以将方法调用视为接受元组的普通调用:
(10, "hello")
同样,通常你不会在这里写空间,因为你知道这实际上是一个.NET方法调用,而不是"将元组传递给函数",但从概念上讲,你可以认为两种方式。
这是摘要 - 有一些极端情况,方法调用的行为并不像元组(例如,当涉及到命名参数时),但这种思考方式应该让您了解事情是如何工作的。