defer

Macro defer 

Source
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().

延迟代码块的执行直到作用域结束。 类似于 LIFO(后进先出队列) 如果遇到不能 mut 超过 2 次的资源引用,尝试嵌套 RefCell 然后使用 .borrow() 和 .borrow_mut()。

for example:

 use dark_std::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");
    }
}