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!("пошук повернув {position:?}"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("пошук повернув {position:?}"); assert_eq!(position.expect("Символ не знайдено"), 0); }
This slide should take about 10 minutes.
Option
широко використовуються, і не тільки в стандартній бібліотеці.unwrap
поверне значення вOption
, або паніку.expect
працює аналогічно, але повертає повідомлення про помилку.- Ви можете панікувати на None, але ви не можете "випадково" забути перевірити на None.
- Під час швидкої експерементації зазвичай прийнято використовувати
unwrap
/expect
повсюди, але у виробничому кодіNone
зазвичай обробляється у більш зручному вигляді.
- Нішева оптимізація означає, що
Option<T>
часто має той самий розмір у пам'яті, що йT
.