每个学习Rust语言的读者碰到单位类型unit type ()的时候都非常疑惑这究竟是个什么鬼?
本文总结了stackoverflow上面的贴子 What is the purpose of the unit type in Rust?加上我自己的理解。
- unit type是一个类型,有且仅有一个值,都写成小括号()
- 单元类型()类似c/c++/java语言中的void。当一个函数并不需要返回值的时候,c/c++/java中函数返回void,rust则返回()。但语法层面上,void仅仅只是一个类型,该类型没有任何值;而单位类型()既是一个类型,同时又是该类型的值。
- 单元类型()也类似c/c++/java中的null,但却有很大不同。 null是一个特殊值,可以赋给不可类型的值,例如java中的对象,c中指向struct实例的指针,c++中的对象指针。但在rust中,()不可以赋值给除单元类型外的其它的类型的变量,()只能赋值给()。
- Rust标准库中使用单元类型()的一个例子是HashSet。一个HashSet
只不过是HashMap的一个非常简单地包裹,写作:HashMap<T, ()>。HashMap的第二个泛型类型参数即用了单元类型() - 可以用Result<(), MyErrorType>代替Option
,某些开发者认为Result<(), MyErrorType>语义上能更简明地表示一个“结果”。
You could argue that Option
is ‘better’, but I disagree; the Result’s naming conventions mean it’s explicitly clear what’s going on.