LINUX.ORG.RU

История изменений

Исправление stevejobs, (текущая версия) :

macro_rules! full_while (
    ($e:expr; $body:block )
        => (
            let mut x = true;
            loop {
                x = $e;                  
                if (true != x) { break; }
                $body;                                  
            }
        );
);

fn post_decrement(r: &mut i32) -> i32 {
    let temp = *r;
    *r = *r - 1;
    return temp;
}

fn main() {
    let mut i = 10;   
    full_while!(post_decrement(&mut i) > 0; {         
        println!("{}", i);
    });
}

На самом деле работает и просто вот так:

fn post_decrement(r: &mut i32) -> i32 {
    let temp = *r;
    *r = *r - 1;
    return temp;
}

fn main() {
    let mut i = 10;   
    while (post_decrement(&mut i) > 0) {         
        println!("{}", i);
    }
}

Но полная версия выше показывает, что нужно делать нытикам, когда они уже не в силах «жрать что дают» xDDD

Исходная версия stevejobs, :

Решение на Rust =)

macro_rules! full_while (
    ($e:expr; $body:block )
        => (
            let mut x = true;
            loop {
                x = $e;                  
                if (true != x) { break; }
                $body;                                  
            }
        );
);

fn post_decrement(r: &mut i32) -> i32 {
    let temp = *r;
    *r = *r - 1;
    return temp;
}

fn main() {
    let mut i = 10;   
    full_while!(post_decrement(&mut i) > 0; {         
        println!("{}", i);
    });
}