#clean #macro #index #allowing #standard #condition #loops

do_while

一个允许在Rust中进行干净'do-while'循环的宏

1个不稳定版本

0.1.0 2022年12月23日

#2273 in Rust模式

MIT许可证

8KB
60

do-while

一个简单的Rust宏,用于编写干净的'do-while'循环。

示例

标准的do-while循环

let mut x = 0;
do_while! {
    do {
        x += 1;
    } while x < 10;
}
assert_eq!(x, 10);

'Do-while-do'循环也受支持,先运行条件评估前的代码块,然后是条件评估后的代码块。这对于格式化列表等操作很有用

let items = vec![1, 2, 3, 4];
let mut string = String::new();

let mut index: usize = 0;
do_while! {
    do {
        string.push(items[index].to_string);
        index += 1;
    } while index < items.len(), do {
        string.push(", ");
    }
}

assert_eq!(string, "1, 2, 3, 4".to_string());

可以在同一个宏调用中混合使用多个do-while和do-while-do循环

let mut x = 0;
let mut y = 0;

let list = vec![5, 6, 7, 8];
let mut string = String::new();
let mut index: usize = 0;

do_while! {
    do {
        x += 1;
    } while x < 10;

    do {
        y -= 1;
    } while y > -20;

    do {
        string.push_str(&list[index].to_string());
        index += 1;
    } while index < list.len(), do {
        string.push_str(", ");
    }
}

assert_eq!(x, 10);
assert_eq!(y, -20);
assert_eq!(string, "5, 6, 7, 8".to_string());

无运行时依赖