Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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