我最近看过这样的代码:
fn read() -> ! {
unimplemented!()
}
fn read2() {
}
fn main() {
read2();
read();
}
我找不到任何关于!
作为fn read()
返回类型的信息,所以我不知道这是什么以及为什么。
我发现的唯一一件事对我来说似乎毫无用处:
使用!作为返回类型向Rust编译器指示此函数永远不会返回
我不明白它的作用,因为省略该类型也表示函数不返回任何内容(实际上是unit
类型)。
答案 0 :(得分:3)
单位()
不是什么, 是一种类型,其中一个可能的值也写为()
。
此外,当一个函数返回单位(或"没有"如你所说)时,它实际上返回。 Never
类型!
指定函数从不返回,即退出程序。
这通常是panic
宏的返回类型:
let s = match i {
1 => "one",
2 => "two",
_ => panic!("Error"),
}
在此示例中,请注意!
可以"扮演角色"所有类型。编译器不会抱怨一个分支的类型为&str
而另一个分支的类型为!
。
有关您的信息,请参阅little history of the Never
type。