F#构造函数语法

F#构造函数语法,f#,F#,使用.net类时,有时不需要括号来传递单个参数,如 let foo = DirectoryInfo "boo" 但是使用一个参数更复杂一些,我们确实需要括号。。。 当这是真的时,有人知道解析规则吗?在F#中,所有函数都接受一个参数。一开始这可能有点让人困惑,因为你可以有一个函数,它看起来接受多个参数,但实际上你只传递了一个参数,这个参数就是元组 下面是一个简单的构造函数示例,它们看起来像是接受了不止一个参数: let foo = DirectoryInfo "boo" //passing 1

使用.net类时,有时不需要括号来传递单个参数,如

let foo = DirectoryInfo "boo"
但是使用一个参数更复杂一些,我们确实需要括号。。。 当这是真的时,有人知道解析规则吗?

在F#中,所有函数都接受一个参数。一开始这可能有点让人困惑,因为你可以有一个函数,它看起来接受多个参数,但实际上你只传递了一个参数,这个参数就是元组

下面是一个简单的构造函数示例,它们看起来像是接受了不止一个参数:

let foo = DirectoryInfo "boo" //passing 1 argument
let foo2 = DirectoryInfo ("boo") //passing 1 argument that is a tuple
let foo3 = StringBuilder ("blah", 100) //passing 1 argument again
let foo4 = StringBuilder "blah" 100 //does not compile
有关此样式的详细信息,请查看


现在,还有另一种稍微不同的方法,使函数看起来需要不止一个参数。这被称为,当只处理F#代码时,您将更经常看到它。下面是一个例子。

感谢您的回复,我知道括号中有元组,但我看到在某些情况下.net类需要在括号中包含参数,即使它是一个单独的参数,现在我认为是当对象可以IDisposable时,我们需要使用新的运算符。所以,像new SomeDisposable(foo)这样的东西需要括号,我不确定这是否准确。例如,使用
FileSystemWatcher
这可以很好地编译:
let watcher=new FileSystemWatcher“blah”
值得注意的是,许多F代码示例在调用类构造函数时总是使用括号。虽然多参数类构造函数需要这样做,但以单数形式这样做会使类构造函数调用看起来像是区分联合构造函数调用的典型形式,这在大多数ML系列语言中都很常见。我总是使用paren,即使是单参数构造函数,只是为了一致性。如果可以避免特殊情况,则无需使代码复杂化。