목차
풀이
// TODO: `Ticket::assigned_to`를 Option을 리턴하도록 구현하세요.
...
#[derive(Debug, PartialEq)]
enum Status {
ToDo,
InProgress { assigned_to: String },
Done,
}
impl Ticket {
...
pub fn assigned_to(&self) -> Option<&String> {
if let Status::InProgress {assigned_to} = &self.status {
Some(assigned_to)
} else {
None
}
}
InProgress
인 경우에는 assigned_to
값이 있지만, 다른 경우에는 해당 값이 없다.
러스트에는 값이 존재하지 않는 경우를 Null
로 표현하지 않고 옵션으로 표현한다.
옵션은 열거형으로, Some
과 None
배리언트가 있다.
값이 존재하는 경우에는 Some
을, 그렇지 않은 경우에는 None
이 된다.
열거형이기 때문에 None
인 경우를 다루지 않는다면 컴파일 에러가 발생한다.
다른 언어라면 Null
값을 제대로 관리하지 않았을 경우 런타임 에러가 발생했을 지도 모르지만, 러스트에서는 컴파일 시에 이를 차단할 수 있다.