Rust具有 unit type(),该类型具有单个零大小值。此单位类型的值也使用()指定。unit类型和它的值的用途是什么?它是一种避免像其他语言那样使用 null(或 nil)的机制吗?
()
4jb9z9bj1#
()是()类型的值,其目的是无用的。Rust中的所有内容都是表达式,而返回“nothing”的表达式实际上返回()。如果你有一个没有返回类型的函数,但返回了()以外的内容,编译器将给予错误。
fn f() { 1i32 // error: mismatched types: expected `()` but found `int` }
()也有实际用途,有时候我们不关心泛型类型,而()明确了这一点。例如,Result<(), String>可以用作函数的返回类型,该函数要么成功完成,要么由于各种原因而失败。
Result<(), String>
bq3bfh9z2#
如果你来自一种类似C语言的语言(C、C++、Java等),你可以把unit想象成void,它是你不想返回任何东西时返回的类型。类型理论家会指出,unit不像void,因为unit正好有1个值,而void有0个值。实际上,两种类型中可以存储的信息量是相同的(0位),尽管使用unit的语言往往更好用,因为可以像对待任何其他值一样对待它。你可以把它存储在变量、结构体、集合或任何其他可以存储值的地方,你可以把它作为参数传递或作为结果返回,你可以创建对它的引用,等等。那么,这在什么时候有用呢?主要是当你不关心你要处理的是什么类型的值时。这意味着你可以编写多态/泛型代码,而不必担心你要处理的值实际上是否包含任何信息,也就是说,不需要一个特殊的情况来决定你要存储的是实际数据还是()。在HashSet中使用了这种方法,HashSet<T>实际上是作为HashMap<T, ()>的瘦 Package 器实现的(从泛型类型T到()的Map)。
void
HashSet
HashSet<T>
HashMap<T, ()>
T
mrfwxfqh3#
Unit type ()用于代码不返回任何内容的情况。从docs()类型,也称为“单位”。()类型正好有一个值(),并且在没有其他有意义的值可以返回时使用。1-不返回任何值的函数
Unit type ()
fn test()->() {}
2-不返回任何内容的代码块:
// in this case type will be let x:()={codeblock} let x={ println!("testing code block") };
fn main(){ let x=(); let y=println!("test"); // this will print out true println!("Are x and y variables equal? / {}",x==y); }
3-它通常用在Result枚举中,在这种枚举中,您不返回任何东西,但希望写入类型以成功执行。示例来自docs:
Result
use std::error::Error; use std::fs::File; fn main() -> Result<(), Box<dyn Error>> { let greeting_file = File::open("hello.txt")?; Ok(()) }
3条答案
按热度按时间4jb9z9bj1#
()
是()
类型的值,其目的是无用的。Rust中的所有内容都是表达式,而返回“nothing”的表达式实际上返回
()
。如果你有一个没有返回类型的函数,但返回了()
以外的内容,编译器将给予错误。()
也有实际用途,有时候我们不关心泛型类型,而()
明确了这一点。例如,
Result<(), String>
可以用作函数的返回类型,该函数要么成功完成,要么由于各种原因而失败。bq3bfh9z2#
如果你来自一种类似C语言的语言(C、C++、Java等),你可以把unit想象成
void
,它是你不想返回任何东西时返回的类型。类型理论家会指出,unit不像void,因为unit正好有1个值,而void有0个值。
实际上,两种类型中可以存储的信息量是相同的(0位),尽管使用unit的语言往往更好用,因为可以像对待任何其他值一样对待它。
你可以把它存储在变量、结构体、集合或任何其他可以存储值的地方,你可以把它作为参数传递或作为结果返回,你可以创建对它的引用,等等。
那么,这在什么时候有用呢?主要是当你不关心你要处理的是什么类型的值时。这意味着你可以编写多态/泛型代码,而不必担心你要处理的值实际上是否包含任何信息,也就是说,不需要一个特殊的情况来决定你要存储的是实际数据还是
()
。在
HashSet
中使用了这种方法,HashSet<T>
实际上是作为HashMap<T, ()>
的瘦 Package 器实现的(从泛型类型T
到()
的Map)。mrfwxfqh3#
Unit type ()
用于代码不返回任何内容的情况。从docs()类型,也称为“单位”。
()类型正好有一个值(),并且在没有其他有意义的值可以返回时使用。
1-不返回任何值的函数
2-不返回任何内容的代码块:
3-它通常用在
Result
枚举中,在这种枚举中,您不返回任何东西,但希望写入类型以成功执行。示例来自docs: