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