macro_rules! defer {
($func:block) => { ... };
($func:expr) => { ... };
{ $($func:expr;)+ } => { ... };
}
Expand description
Defers evaluation of a block of code until the end of the scope. Sort of LIFO(last-in, first-out queue) If you encounter references to resources that cannot mut more than 2 times, try nesting RefCell and then use.borrow() and.borrow_mut().
for example:
use cogo::defer;
//LIFO, so it will print: guard: 3 guard: 2 guard: 1
fn main(){
defer!({
println!("guard: 1");
});
defer!(||{
println!("guard: 2");
});
defer!{
println!("guard: 3");
}
}