返回介绍

3.2 控制

发布于 2024-10-13 11:25:28 字数 2296 浏览 0 评论 0 收藏 0

依据条件控制代码执行,实现逻辑分支或循环。

选择

条件表达式必须返回布尔值,否则出错。不进行隐式转换。

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

终止方式: breakreturnpanic!()std::process::exit()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文