在这里看问题 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)
因为它永远循环,所以永远不会返回
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |