while 和 loop

在 Sui 的 Move 中,循环结构由 while 和 loop 结构提供。

1. while

如果条件块为真,while 结构将重复执行主体。

#[test]
fun while_test() {
    let mut sum = 0;
    let mut counter = 0;
    while (counter < 5) {
        counter = counter + 1;
        sum = sum + 1;
    };
    assert!(sum == 5, 0);
}

在上面的代码示例中,sum 将重复加 1,直到条件 counter < 5 为假;

循环结构也支持 break 和 continue 控制表达式;

1.1 break

break 表达式将强制循环提前终止,而不等待条件表达式为假。

#[test]
fun while_break_test() {
    let mut sum = 0;
    let mut counter = 0;
    while (counter < 5) {
        counter = counter + 1;
        sum = sum + 1;
        if (sum == 3) {
            break;
        }
    };
    assert!(sum == 3, 0);
}

1.2 continue

continue 表达式跳过当前循环的其余部分,并直接开始下一次循环。

#[test]
fun while_continue_test() {
    let mut sum = 0;
    let mut counter = 0;
    while (counter < 5) {
        counter = counter + 1;
        if (counter == 2) {
            continue;
        };
        sum = sum + 1;
    };
    assert!(sum == 4, 0);
}

在示例中,sum 加 1 被跳过了一次。

2. loop

通过 loop 表达式的循环结构是一个无限循环,除非有 break 停止它。

loop {
    sum = sum + 1;
};

等效于

while (true) {
    sum = sum + 1;
};