Panic 恐慌
让我们回顾一下在“变量”章节中编写的 speed
函数。大概像这样:
#![allow(unused)] fn main() { fn speed(start: u32, end: u32, time_elapsed: u32) -> u32 { let distance = end - start; distance / time_elapsed } }
如果你观察细致的话,可能会发现一个问题1:如果 time_elapsed
为零怎么办?
你可以在Rust playground上试一试。程序会以以下错误退出:
thread 'main' panicked at src/main.rs:3:5:
attempt to divide by zero
这就是所谓的panic。
panic是Rust表明出现了严重错误,程序无法继续执行,是不可恢复的错误2。除以零属于这类错误。
panic! 宏
你可以通过调用 panic!
宏3故意触发恐慌:
fn main() { panic!("This is a panic!"); // The line below will never be executed let x = 1 + 2; }
Rust 还有其他处理可恢复错误的机制,我们将在稍后讨论。 目前,我们将使用恐慌作为简单但直接的临时解决方案。
参考
本节练习位于 exercises/02_basic_calculator/04_panics
深入一步阅读
1
speed
还有另一个问题,我们很快会解决。你能发现吗?
2
你可以尝试捕获恐慌,但这应作为最后的手段,仅保留于特定情况。
3
如果后面跟着 !
,那便是宏的调用法。目前可以把宏想象为加了调料的函数。我们将在课程后面更深入地讲解它们。