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

qnyhuwrf  于 2023-01-26  发布在  其他
关注(0)|答案(3)|浏览(125)

Rust具有 unit type(),该类型具有单个零大小值。此单位类型的值也使用()指定。
unit类型和它的值的用途是什么?它是一种避免像其他语言那样使用 null(或 nil)的机制吗?

4jb9z9bj

4jb9z9bj1#

()()类型的值,其目的是无用的。
Rust中的所有内容都是表达式,而返回“nothing”的表达式实际上返回()。如果你有一个没有返回类型的函数,但返回了()以外的内容,编译器将给予错误。

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

()也有实际用途,有时候我们不关心泛型类型,而()明确了这一点。
例如,Result<(), String>可以用作函数的返回类型,该函数要么成功完成,要么由于各种原因而失败。

bq3bfh9z

bq3bfh9z2#

如果你来自一种类似C语言的语言(C、C++、Java等),你可以把unit想象成void,它是你不想返回任何东西时返回的类型。
类型理论家会指出,unit不像void,因为unit正好有1个值,而void有0个值。
实际上,两种类型中可以存储的信息量是相同的(0位),尽管使用unit的语言往往更好用,因为可以像对待任何其他值一样对待它。
你可以把它存储在变量、结构体、集合或任何其他可以存储值的地方,你可以把它作为参数传递或作为结果返回,你可以创建对它的引用,等等。
那么,这在什么时候有用呢?主要是当你不关心你要处理的是什么类型的值时。这意味着你可以编写多态/泛型代码,而不必担心你要处理的值实际上是否包含任何信息,也就是说,不需要一个特殊的情况来决定你要存储的是实际数据还是()
HashSet中使用了这种方法,HashSet<T>实际上是作为HashMap<T, ()>的瘦 Package 器实现的(从泛型类型T()的Map)。

mrfwxfqh

mrfwxfqh3#

Unit type ()用于代码不返回任何内容的情况。从docs
()类型,也称为“单位”。
()类型正好有一个值(),并且在没有其他有意义的值可以返回时使用。
1-不返回任何值的函数

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:

use std::error::Error;
use std::fs::File;

fn main() -> Result<(), Box<dyn Error>> {
    let greeting_file = File::open("hello.txt")?;

    Ok(())
}

相关问题