选项 Option
有时候想要捕捉到程序某部分的失败信息,而不是调用 panic!;这可使用 Option
枚举类型来实现。
Option<T> 有两个变量:
None,表明失败或缺少值Some(value),元组结构体,封装了一个T类型的值value
// 不会 `panic!` 的整数除法。fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {if divisor == 0 {// 失败表示成 `None` 取值None} else {// 结果 Result 被包装到 `Some` 取值中Some(dividend / divisor)}}// 此函数处理可能失败的除法fn try_division(dividend: i32, divisor: i32) {// `Option` 值可以进行模式匹配,就和其他枚举类型一样match checked_division(dividend, divisor) {None => println!("{} / {} failed!", dividend, divisor),Some(quotient) => {println!("{} / {} = {}", dividend, divisor, quotient)},}}fn main() {try_division(4, 2);try_division(1, 0);// 绑定 `None` 到一个变量需要类型标注let none: Option<i32> = None;let _equivalent_none = None::<i32>;let optional_float = Some(0f32);// 解包 `Some` 将取出被包装的值。println!("{:?} unwraps to {:?}", optional_float, optional_float.unwrap());// 解包 `None` 将会引发 `panic!`。println!("{:?} unwraps to {:?}", none, none.unwrap());}
