Rust 中单元类型的用途是什么?

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

单位类型及其值的用途是什么?它是一种像其他语言一样避免使用 无效(或 没有)的机制吗?

18751 次浏览

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

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

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

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

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

如果您来自类 C 语言(C、 C + + 、 Java 等) ,您可以将单元看作是类似于 void的语言。它是当您不想返回任何内容时返回的类型。

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

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

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

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

HashSet中使用这种方法的一个例子是。HashSet<T>实际上实现为 围绕 HashMap<T, ()>的一层薄膜。(从泛型类型 T()的映射)