panic!과 다르게 복구가 가능한 에러에는 종종 Result
를 사용한다. Result
는 성공시 Ok
혹은 실패 시 Err
를 표현한다. Ok
일 시 T타입을 반환하고, Err
일 시 E 타입을 반환한다.
pub enum Result<T, E> {
Ok(T),
Err(E),
}
대표적인 impl
들
reulst 가 Ok
라면 true
를 반환한다.
let x: Result<i32, &str> = Ok(-3);
assert_eq!(x.is_ok(), true);
result 가 Ok
이고 인자로 들어온 구문이 성립하면 true
를 반환한다.
let x: Result<u32, &str> = Ok(2);
assert_eq!(x.is_ok_and(|x| x > 1), true);
reulst 가 Err
라면 true
를 반환한다.
result 가 Err
이고 인자로 들어온 구문이 성립하면 true
를 반환한다.
Result<T, E>
를 Option<T>
로 변환한다. self
를 소모하여 `Option로 변환하고, error가 존재한다면 무시한다.
let x: Result<u32, &str> = Ok(2);
assert_eq!(x.ok(), Some(2));
let x: Result<u32, &str> = Err("Nothing here");
assert_eq!(x.ok(), None);
Result<T, E>
를 Option<E>
로 변환한다. self
를 소모하여 `Option로 변환하고, success가 존재한다면 무시한다.
let x: Result<u32, &str> = Ok(2);
assert_eq!(x.err(), None);
let x: Result<u32, &str> = Err("Nothing here");
assert_eq!(x.err(), Some("Nothing here"));