文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.2 控制
依据条件控制代码执行,实现逻辑分支或循环。
选择
条件表达式必须返回布尔值,否则出错。不进行隐式转换。
fn main() { let x = 5; if x >= 5 { println!("x >= 5"); } else if x < 5 && x > 0 { println!("0 < x < 5"); } else { println!("x <= 0"); } }
fn main() { let x = 5; if x { ^ expected `bool`, found integer } }
实现类似三元运算符( ?:
)效果。
fn main() { let x = true; let _a = if x { 1 } else { 0 }; // 返回值类型必须相同! }
fn main() { let x = true; let _a = if x { 1 } else { "abc" }; ^^^^^ expected integer, found `&str` }
fn main() { let x = true; let _a = if x { 1 }; ^ may be missing an `else` clause. expected integer, found `()` }
循环
三种循环模式。
loop {...}
: 无限循环,手动终止(break, return)。while cond {...}
: 条件循环。for x in iter {...}
: 迭代。
循环是表达式,默认返回 unit
。可用 break
为 loop 返回值,其余模式里仅中断。
fn main() { let _x = loop { break 1; // return value }; }
fn main() { let mut count = 3; while count > 0 { println!("{}", count); count -= 1; }; }
迭代用于遍历数据集合。
a..b
:[a, b)
(std::ops::Range
)a..=b
:[a, b]
(std::ops::RangeInclusive
)
fn main() { for x in 1..=10 { println!("{}", x); } }
for (i, j) in (5..10).enumerate() { // 返回 index, elem println!("{}: {}", i, j); } // 0: 5 // 1: 6 // 2: 7 // 3: 8 // 4: 9
迭代器(iterator)遍历数据。
fn main() { let data = [1, 2, 3, 4]; for d in data.iter() { println!("{:?}", d); } }
配合标签(label)在多层嵌套中跳出。
标签以
'
为前缀。同时包含标签和返回值:
break 'label value
。
fn main() { 'outer: for x in 0..10 { 'inner: for y in 0..10 { if x % 2 == 0 { continue 'outer; } if y > 2 { break 'inner; } println!("x: {}, y: {}", x, y); } } }
终止方式:
break
、return
、panic!()
、std::process::exit()
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论