看着问题编号3here。
作为一个例子,我已经编辑了。
fn main() {
never_return();
// println!("Failed!");
}
fn never_return() -> ! {
// Implement this function, don't modify the fn signatures
panic!("stop")
}
当从fn返回内容时,期望没有尾随的;
。在上面的例子中,panic!(_)
返回类型never
,并执行我期望它执行的操作。但是,返回!
的相同fn签名,不管panic
宏后面是否有;
,都编译为相同的值。我假设这是因为panic
的内部函数?但找不到一个我能理解的技术解释。
为什么会这样呢?
1条答案
按热度按时间4ioopgfo1#
我想你误解了
!
类型。panic!
宏并不是“永远不返回类型”,而是永远不返回。通过使用fn foo() -> !
签名,你就声明了这个函数实际上永远不返回,并调用另一个永远不返回的函数/宏来满足这一点。类似地,下面的编译器:因为它永远循环,所以它 * 永远 * 不返回