什么是`!`作为Rust中的返回类型?

时间:2017-10-11 13:42:20

标签: rust

我最近看过这样的代码:

fn read() -> ! {
    unimplemented!()
}

fn read2() {
}

fn main() {
    read2();
    read();
}

我找不到任何关于!作为fn read()返回类型的信息,所以我不知道这是什么以及为什么。

我发现的唯一一件事对我来说似乎毫无用处:

  

使用!作为返回类型向Rust编译器指示此函数永远不会返回

我不明白它的作用,因为省略该类型也表示函数不返回任何内容(实际上是unit类型)。

1 个答案:

答案 0 :(得分:3)

单位()不是什么, 是一种类型,其中一个可能的值也写为()

此外,当一个函数返回单位(或"没有"如你所说)时,它实际上返回。 Never类型!指定函数从不返回,退出程序。

这通常是panic宏的返回类型:

let s = match i {
    1 => "one",
    2 => "two",
    _ => panic!("Error"),
}

在此示例中,请注意!可以"扮演角色"所有类型。编译器不会抱怨一个分支的类型为&str而另一个分支的类型为!

有关您的信息,请参阅little history of the Never type