Option
我们已经了解了 Option<T>
的一些用法。它可以存储“T”类型的值,或者不存储任何值。例如,'String::find' 会返回 Option<usize>
。
fn main() { let name = "Löwe 老虎 Léopard Gepardi"; let mut position: Option<usize> = name.find('é'); println!("find returned {position:?}"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("find returned {position:?}"); assert_eq!(position.expect("Character not found"), 0); }
-
Option
is widely used, not just in the standard library. -
unwrap
会返回Option
或 panic 中的值。expect
方法与此类似,但其使用错误消息。- 出现 None 时您或许会恐慌,但不能 “无意中”忘记检查是否为 None 的情况。
- 在草拟阶段的编程中,频繁使用
unwrap
/expect
进行处理十分常见,但在正式版代码时,通常以更为妥当的方式处理None
的情况。
-
The "niche optimization" means that
Option<T>
often has the same size in memory asT
, if there is some representation that is not a valid value of T. For example, a reference cannot be NULL, soOption<&T>
automatically uses NULL to represent theNone
variant, and thus can be stored in the same memory as&T
.