代码之家  ›  专栏  ›  技术社区  ›  Joseph Sible-Reinstate Monica

为什么Rust不能推断出never类型?

  •  0
  • Joseph Sible-Reinstate Monica  · 技术社区  · 4 年前

    考虑这个锈病代码:

    fn loop_forever() {
        loop {
            
        }
    }
    
    fn main() {
        let hello = if true { "Hello, world!" } else { loop_forever() };
        println!("{}", hello);
    }
    

    返回类型为 loop_forever 推断为 () 所以 compilation fails 因为这与 "Hello, world!" 。但返回类型可以是 ! 相反,如果我写 fn loop_forever() -> ! { 而不是让它被推断出来 it works fine .那么为什么Rust一开始就不能推断出这一点呢?

    1 回复  |  直到 4 年前
        1
  •  5
  •   kmdreko    4 年前

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

    推荐文章