17.4 Option

때로는 panic!의 호출 대신 프로그램의 일부인 실패를 잡는 것이 바람직하다; 이는 Option enum을 사용하여 성취될 수 있다.

Option<T> enum 은 두 형태를 갖는다:

  • None, 실패 혹은 값이 부족한 경우를 나타낸다.
  • Some(value), 타입 T로 포장된 value인 튜플 구조체
// `panic!`
fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
if divisor == 0 {
// `None` .
None
} else {
// `Some` .
Some(dividend / divisor)
}
}
// .
fn try_division(dividend: i32, divisor: i32) {
// `Option` enum .
match checked_division(dividend, divisor) {
None => println!("{} / {} failed!", dividend, divisor),
Some(quotient) => {
println!("{} / {} = {}", dividend, divisor, quotient)
},
}
}
fn main() {
try_division(4, 2);
try_division(1, 0);
// `None` .
let none: Option<i32> = None;
let _equivalent_none = None::<i32>;
let optional_float = Some(0f32);
// `Some` .
println!("{:?} unwraps to {:?}", optional_float, optional_float.unwrap());
// `None` `panic!`.
println!("{:?} unwraps to {:?}", none, none.unwrap());
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

results matching ""

    No results matching ""