rust 語法和語義 07 循環
循環:loops
概述
rust提供了三種迭代操作的方法:loop
,while
和 for
。
loop { /* loop forever! */ }
while if_expression { /* do until expression become false */ }
for var in iterators_expression { /* do something */ }
loop
無限循環,使用關鍵字 loop
。
loop {
// loop forever!
}
while
while 循環是當你不確定應該循環多少次時正確的選擇。
let mut x = 5;
let mut done = false;
while !done {
x += x - 3;
if x % 5 == 0 {
done = true;
}
}
無限循環的 while true {}
和 loop {}
。rust的控制流分析會區別對待。請傾向於使用 loop
。
for
for 用來循環一個特定的次數。
for var in expression { code }
而這個表達式expression是一個 迭代器
。
- 迭代器返回一系列的元素
- 每次迭代循環中的一個元素,值於var綁定
- 它在循環體中有效
- 每次循環就從迭代器中取出下一個值,直至取完,循環結束。
如,
for x in 0..10 {
println!("{}", x);
}
Enumerate 方法
當你需要記錄你已經循環了多少次了的時候,你可以使用 .enumerate()
函數。
對於範圍 On ranges
for (i, v) in (5..10).enumerate() {
println!("index = {} and value = {}", i, v);
}
對於迭代器 On iterators
let lines = "hello\nworld".lines();
for (linenumber, line) in lines.enumerate() {
println!("{}: {}", linenumber, line);
}
提早結束迭代 Ending iteration early
rust 有兩個關鍵字 break
和 continue
。
- break:退出循環
- continue:進行下一次循環
用在 while 中,
let mut x = 5;
loop {
x += x - 3;
if x % 5 == 0 { break; }
}
用在 for 中,
for x in 0..10 {
if x % 2 == 0 { continue; }
println!("{}", x);
}
循環標籤 loop labels
如大多數語言,默認 break
或 continue
將會作用於 最內層
的循環。
rust可以使用標籤 'label_name:
(單引號+標籤名+冒號
) 來指定你的 break
或 continue
語句作用的循環。
'outer: for x in 0..10 {
'inner: for y in 0..10 {
if x % 2 == 0 {continue 'outer;} // Continues the loop over `x`.
if y % 2 == 0 {continue 'inner;} // Continues the loop over `y`.
println!("x: {}, y: {}", x, y);
}
}