rust 語法和語義 07 循環

rust 語法和語義 07 循環

循環:loops


概述

rust提供了三種迭代操作的方法:loopwhilefor

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 有兩個關鍵字 breakcontinue

  • 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

如大多數語言,默認 breakcontinue 將會作用於 最內層 的循環。

rust可以使用標籤 'label_name: (單引號+標籤名+冒號) 來指定你的 breakcontinue 語句作用的循環。

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

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章