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;
};