rust 语法和语义 07 循环
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 world".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); } }