为什么 Rust 不推断 never 类型?

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 不首先推断出这一点呢?

kmd*_*eko 7

Rust 从不推断函数的返回类型。如果未指定,则默认为(). 函数体内部不能影响函数的签名。