Abort и Unwind

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабе мы исследуем варианты стратегии panic abort и unwind, которые можно использовать для обработки ошибок в коде на Rust.

Примечание: Если в лабе не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.

abort и 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

Резюме

Поздравляем! Вы завершили лабу по Abort и Unwind. Вы можете практиковаться в других лабах в LabEx, чтобы улучшить свои навыки.