为什么说 Rust 没有 null?深入解析 Option<T> 与 Result<T, E>,掌握 match 穷尽性检查与 if let 语法糖。
1. 极其强大的带数据枚举
Rust 的枚举不仅是数字标记,还可以携带任意类型的数据(类似于代数数据类型 ADT):
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
2. Option<T> 替代 Null
通过标准库的 Option<T>,编译器强制开发者在编译期显式处理为空的分支,彻底杜绝生产环境的 NullPointerException:
fn plus_one(x: Option<i32>) -> Option<i32> {
match x {
None => None,
Some(i) => Some(i + 1),
}
}