简介
在这个实验中,你将学习 Rust 中的 Option<T> 枚举,它提供了两个变体(None 和 Some(value))来处理程序中的失败或值缺失情况。
注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用
main.rs,通过rustc main.rs &&./main来编译并运行它。
在这个实验中,你将学习 Rust 中的 Option<T> 枚举,它提供了两个变体(None 和 Some(value))来处理程序中的失败或值缺失情况。
注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用
main.rs,通过rustc main.rs &&./main来编译并运行它。
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 {
// 结果包装在 `Some` 变体中
Some(dividend / divisor)
}
}
// 这个函数处理可能不成功的除法
fn try_division(dividend: i32, divisor: i32) {
// `Option` 值可以像其他枚举一样进行模式匹配
match checked_division(dividend, divisor) {
None => println!("{} / {} 失败!", 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!("{:?} 解包后为 {:?}", optional_float, optional_float.unwrap());
// 解包 `None` 变体将导致 `panic!`
println!("{:?} 解包后为 {:?}", none, none.unwrap());
}
恭喜你!你已经完成了 Option 实验。你可以在 LabEx 中练习更多实验来提升你的技能。