为什么panic!(_)可以带或不带;返回?

ken*_*esu 5 panic rust

在这里看问题 3 。

举个例子,我已经这样编辑了。

fn main() {
    never_return();
    // println!("Failed!");
}

fn never_return() -> ! {
    // Implement this function, don't modify the fn signatures
    panic!("stop")
}
Run Code Online (Sandbox Code Playgroud)

从 fn 返回某些内容时的期望是没有尾随的;。在上面的情况下,panic!(_)返回一个类型never并执行我期望的操作。但是,相同的 fn 签名返回!,无论宏;后面panic是否有 a ,都会编译为相同的结果。我假设情况是这样,因为panic?的内在本质。但找不到我理解的技术解释。

为什么会这样呢?

小智 3

我认为你误解了这种!类型。该panic!宏不会“从不返回类型”,而是从不返回。通过使用fn foo() -> !签名,您可以声明该函数实际上永远不会返回,并且调用另一个永远不会返回的函数/宏可以满足这一点。同样,编译如下:

fn never_returns() -> ! {
  loop { }
}
Run Code Online (Sandbox Code Playgroud)

因为它永远循环,所以永远不会返回