Rust中单位类型的目的是什么?

时间:2014-07-19 16:04:07

标签: rust unit-type

Rust具有单位类型(),一种具有单个零大小值的类型。此单位类型的值也使用()指定。

单位类型及其价值的目的是什么?这是一种避免像其他语言一样使用 null (或 nil )的机制吗?

2 个答案:

答案 0 :(得分:38)

()()类型的值,其目的是无用的。

Rust中的所有内容都是表达式,返回“nothing”的表达式实际上返回()。如果你有一个没有返回类型的函数但是仍然返回()以外的函数,编译器会给出错误。例如

fn f() {
    1i32 // error: mismatched types: expected `()` but found `int`
}

()也有实际用途。有时我们不关心泛型类型,()使这一点明确。

例如,Result<(), String>可以用作成功完成或因各种原因失败的函数的返回类型。

答案 1 :(得分:19)

如果您来自类C语言(C,C ++,Java等),您可以将单位视为void。当您不想返回任何内容时,它是您返回的类型。

类型理论家会指出单位不像void,因为单位只有1个值,而void有0个值。

实际上,您可以在两种类型中存储的信息量是相同的(0位),尽管使用单位的语言往往更好用,因为您可以像对待任何其他值一样对待它。

您可以将其存储在变量,结构,集合或您可以存储值的任何其他位置。您可以作为参数传递或作为结果返回。您可以创建对它的引用。等

那么,什么时候有用?主要是当你不在乎你正在处理什么类型的价值。这意味着您可以编写多态/通用代码,而无需担心您正在处理的值是否实际包含任何信息,也就是说,无论是否存储实际数据或()都不需要特殊情况。

使用它的一个例子是HashSetHashSet<T>实际上已实现为a thin wrapper around HashMap<T, ()>。 (从通用类型T()

的地图