abort와 unwind
이전 섹션에서는 에러 핸들링 메커니즘인 panic을 설명했습니다. 패닉 설정에 따라 서로 다른 코드 경로를 조건부로 컴파일할 수 있습니다. 현재 사용 가능한 값은 unwind와 abort입니다.
앞선 레모네이드 예제를 바탕으로, 서로 다른 코드 라인을 실행해 보기 위해 패닉 전략을 명시적으로 사용합니다.
fn drink(beverage: &str) {
// 설탕이 든 음료를 너무 많이 마시면 안 됩니다.
if beverage == "레모네이드" {
if cfg!(panic = "abort") {
println!("여긴 당신 파티가 아니에요. 도망쳐요!!!!");
} else {
println!("뱉어내요!!!!");
}
} else {
println!("상쾌한 {}만 있으면 돼요.", beverage);
}
}
fn main() {
drink("물");
drink("레모네이드");
}
여기 drink()를 다시 작성하고 unwind 키워드를 명시적으로 사용하는 또 다른 예제가 있습니다.
#[cfg(panic = "unwind")]
fn ah() {
println!("뱉어내요!!!!");
}
#[cfg(not(panic = "unwind"))]
fn ah() {
println!("여긴 당신 파티가 아니에요. 도망쳐요!!!!");
}
fn drink(beverage: &str) {
if beverage == "레모네이드" {
ah();
} else {
println!("상쾌한 {}만 있으면 돼요.", beverage);
}
}
fn main() {
drink("물");
drink("레모네이드");
}
패닉 전략은 커맨드 라인에서 abort 또는 unwind를 사용하여 설정할 수 있습니다.
rustc lemonade.rs -C panic=abort