在f#中调用函数时何时使用括号?

时间:2017-06-01 22:10:10

标签: f#

我正在学习f#,我知道你在调用函数时不需要使用括号。

实施例

let addOne arg1 =
    arg1 + 1

addOne 1

VS

this.GetType()

为什么我必须在第二个函数上使用括号?

1 个答案:

答案 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方法调用,而不是"将元组传递给函数",但从概念上讲,你可以认为两种方式。

这是摘要 - 有一些极端情况,方法调用的行为并不像元组(例如,当涉及到命名参数时),但这种思考方式应该让您了解事情是如何工作的。