Introduction
In this lab, we explore the panic strategy options abort and unwind, which can be used to handle errors in Rust code.
Note: If the lab does not specify a file name, you can use any file name you want. For example, you can use
main.rs, compile and run it withrustc main.rs && ./main.
abort and unwind
The previous section illustrates the error handling mechanism panic. Different code paths can be conditionally compiled based on the panic setting. The current values available are unwind and abort.
Building on the prior lemonade example, we explicitly use the panic strategy to exercise different lines of code.
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");
}
Here is another example focusing on rewriting drink() and explicitly use the unwind keyword.
#[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");
}
The panic strategy can be set from the command line by using abort or unwind.
rustc lemonade.rs -C panic=abort
Summary
Congratulations! You have completed the Abort and Unwind lab. You can practice more labs in LabEx to improve your skills.