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 相同。