【编程开发】Rust 语法速查 & 例子 - 控制流程

本文是关于Rust编程语言的学习笔记,介绍了Rust中的基本控制结构如while、loop、for、if-else、循环标签、break和continue的使用,以及异步编程中的await和错误处理。还涵盖了函数的返回值和方法调用示例。
摘要由CSDN通过智能技术生成

本系列是学习 Rust 的学习笔记,本编主要对 https://cheats.rs/ 的语法速查表进行翻译学习

在函数中控制执行。

示例说明
while x {}当表达式 x 为真时执行循环。
loop {}无限循环直到遇到 break。可使用 break x 返回一个值。
for x in iter {}用于遍历迭代器的语法糖。
     ~~~~     collection.into_iter()将任何 IntoIterator 类型转换为适当的迭代器。
     ~~~~     iterator.next()在适当的 Iterator 上,直到耗尽(首个 None)为止。
if x {} else {}如果表达式为真则执行其中内容,否则执行另外内容。
'label: {}用于在嵌套循环中进行流程控制的循环标签。1.65+
'label: loop {}嵌套循环中使用的类似循环标签,有助于流程控制。
break用于退出循环的表达式。
     ~~~~      break 'label x退出命名为 'label 的块或循环,并返回值 x
     ~~~~      break 'label同上,但不产生任何值。
     ~~~~      break x使 x 成为最内层循环的值(仅在实际的 loop 中)。
continue跳过本次循环,继续下一次循环的表达式。
continue 'label类似于 continue,但是跳过标记为 'label 的循环。
x?如果 x 是 Err 或 None,则返回并传播错误。
x.await仅在 async 内部有效。暂停流程直到 Future 或流 x 准备就绪。 '18
     ~~~~     x.into_future()将任何 IntoFuture 类型转换为适当的 Future。
     ~~~~     future.poll()在适当的 Future 上调用 poll(),如果 Poll::Pending 则让出流程。
return x从函数中提前返回。更惯用的方法是以表达式结束。
     ~~~~      { return }在普通 {} 块内,return 退出周围的函数。
     ~~~~      | | { return }在闭包内,return 只退出该闭包。
     ~~~~      async { return }在 async 中,return 仅退出该 {}
f()调用可调用的 f(例如函数、闭包、函数指针、Fn 等)。
x.f()调用成员函数,要求 fself&self 等作为第一个参数。
     ~~~~     X::f(x)x.f() 相同。除非 impl Copy for X {},否则 f 只能调用一次。
     ~~~~      X::f(&x)x.f() 相同。
     ~~~~      X::f(&mut x)x.f() 相同。
     ~~~~      S::f(&x)如果 X 解引用为 S,则与 x.f() 相同,即 x.f() 查找 S 的方法。
     ~~~~      T::f(&x)如果 X impl T,则与 x.f() 相同,即如果在作用域中,x.f() 查找 T 的方法。
X::f()调用关联函数,例如 X::new()
     ~~~~      <X as T>::f()调用为 X 实现的特性方法 T::f()

控制流程的简单示例:

  1. while 循环

    • 示例:
      let mut count = 0;
      while count < 5 {
          println!("Count: {}", count);
          count += 1;
      }
      
  2. loop 无限循环

    • 示例:
      let mut count = 0;
      loop {
          println!("Count: {}", count);
          count += 1;
          if count == 5 {
              break;
          }
      }
      
  3. for 循环

    • 示例:
      let numbers = vec![1, 2, 3, 4, 5];
      for num in numbers {
          println!("Number: {}", num);
      }
      
  4. 条件分支 if-else

    • 示例:
      let num = 6;
      if num % 2 == 0 {
          println!("Even");
      } else {
          println!("Odd");
      }
      
  5. 循环标签

    • 示例:
      'outer: loop {
          println!("Entered the outer loop");
          'inner: loop {
              println!("Entered the inner loop");
              break 'outer; // 退出外部循环
          }
      }
      
  6. 循环控制 break 和 continue

    • 示例:
      for i in 1..=5 {
          if i == 3 {
              continue; // 跳过当前迭代,继续下一次迭代
          }
          println!("Number: {}", i);
          if i == 4 {
              break; // 退出循环
          }
      }
      
  7. 错误处理

    • 示例:
      fn read_file(file_path: &str) -> Result<String, std::io::Error> {
          let content = std::fs::read_to_string(file_path)?;
          Ok(content)
      }
      
  8. 异步 await

    • 示例(在异步函数内部):
      async fn fetch_data() -> Result<String, reqwest::Error> {
          let response = reqwest::get("https://api.example.com/data").await?;
          let content = response.text().await?;
          Ok(content)
      }
      
  9. 返回值

    • 示例:
      fn add(a: i32, b: i32) -> i32 {
          a + b // 返回值是 a 和 b 的和
      }
      
  10. 方法调用

    • 示例:
      struct Rectangle {
          width: u32,
          height: u32,
      }
      
      impl Rectangle {
          fn area(&self) -> u32 {
              self.width * self.height
          }
      }
      
      fn main() {
          let rect = Rectangle { width: 10, height: 20 };
          println!("Area: {}", rect.area());
      }
      
  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值