Jos*_*ica 0 type-inference rust bottom-type
考虑这个 Rust 代码:
fn loop_forever() {
loop {
}
}
fn main() {
let hello = if true { "Hello, world!" } else { loop_forever() };
println!("{}", hello);
}
Run Code Online (Sandbox Code Playgroud)
的返回类型loop_forever被推断为(),因此编译失败,因为它与 的类型不兼容"Hello, world!"。但返回类型可以是!相反的,如果我编写fn loop_forever() -> ! {而不是让它被推断,那么它就可以正常工作。那么为什么 Rust 不首先推断出这一点呢?