2元组或3元组表示一组相关项。(2D空间中的点数,颜色的RGB值等。)1元组不是很有用,因为可以很容易地将其替换为单个1 int。
一个0元组似乎毫无用处,因为它绝对不包含任何东西。但是它具有的特性使其在F#等功能语言中非常有用。例如,0元组类型只有一个值,通常表示为()。所有0元组都具有此值,因此本质上是单例类型。在包括F#在内的大多数功能编程语言中,这称为unit类型。
void以C#返回的函数将以unitF#返回类型:
let printResult = printfn "Hello"
在F#交互式解释器中运行该代码,您将看到:
val printResult : unit = ()
这意味着该值printResult是类型unit,并且具有值()(空元组,该unit类型的唯一值)。
函数也可以将unit类型作为参数。在F#中,函数看起来好像没有参数。但实际上,它们只是采用type的单个参数unit。该功能:
let doMath() = 2 + 4
实际上等效于:
let doMath () = 2 + 4
就是说,一个带有一个类型参数unit并返回int值6的函数。如果您在定义此函数时查看F#交互式解释器打印的类型签名,则会看到:
val doMath : unit -> int
所有函数都将至少使用一个参数并返回一个值,即使该值有时是一个“无用的”值(例如)(),这一事实意味着F#中的函数组合比没有unit类型的语言要容易得多。但这是一个更高级的主题,我们将在以后讨论。现在,请记住,当您unit在函数签名或()函数的参数中看到时,这就是0元组类型,它表示“此函数不接受或返回任何有意义的值”。