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); }
This slide should take about 10 minutes.
Option
is widely used, not just in the standard library.unwrap
會在Option
或恐慌中傳回值。expect
也類似,但會收到錯誤訊息。- 您可以讓程式在 None 發生恐慌,但不能「因錯而」忘記檢查 None。
- 如果是要設計某些臨時程式,通常會在各處
unwrap
/expect
,但實際運作的程式碼一般會以較好的方式處理None
。
- 所謂區位最佳化,代表
Option<T>
的記憶體大小通常與T
相同。