Rust具有单位类型,()
,一种具有单个零大小值的类型。此单位类型的值也使用()
指定。
单位类型及其价值的目的是什么?这是一种避免像其他语言一样使用 null (或 nil )的机制吗?
答案 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位),尽管使用单位的语言往往更好用,因为您可以像对待任何其他值一样对待它。
您可以将其存储在变量,结构,集合或您可以存储值的任何其他位置。您可以作为参数传递或作为结果返回。您可以创建对它的引用。等
那么,什么时候有用?主要是当你不在乎你正在处理什么类型的价值。这意味着您可以编写多态/通用代码,而无需担心您正在处理的值是否实际包含任何信息,也就是说,无论是否存储实际数据或()
都不需要特殊情况。
使用它的一个例子是HashSet
。 HashSet<T>
实际上已实现为a thin wrapper around HashMap<T, ()>
。 (从通用类型T
到()
)