abort and unwind
Попередній розділ ілюструє механізм обробки помилок panic. Різні шляхи виконання можуть умовно компілюватися залежно від налаштування panic. Наразі доступні значення — unwind і abort.
Спираючись на попередній приклад із лимонадом, ми явно використовуємо стратегію panic, щоб задіяти різні рядки коду.
fn drink(beverage: &str) {
// You shouldn't drink too much sugary beverages.
if beverage == "lemonade" {
if cfg!(panic = "abort") {
println!("This is not your party. Run!!!!");
} else {
println!("Spit it out!!!!");
}
} else {
println!("Some refreshing {} is all I need.", beverage);
}
}
fn main() {
drink("water");
drink("lemonade");
}
Ось ще один приклад, зосереджений на переписуванні drink() і явному використанні ключового слова unwind.
#[cfg(panic = "unwind")]
fn ah() {
println!("Spit it out!!!!");
}
#[cfg(not(panic = "unwind"))]
fn ah() {
println!("This is not your party. Run!!!!");
}
fn drink(beverage: &str) {
if beverage == "lemonade" {
ah();
} else {
println!("Some refreshing {} is all I need.", beverage);
}
}
fn main() {
drink("water");
drink("lemonade");
}
Стратегію panic можна встановити з командного рядка, використовуючи abort або unwind.
rustc lemonade.rs -C panic=abort