本系列是学习 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() | 调用成员函数,要求 f 将 self 、&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() 。 |
控制流程的简单示例:
-
while 循环
- 示例:
let mut count = 0; while count < 5 { println!("Count: {}", count); count += 1; }
- 示例:
-
loop 无限循环
- 示例:
let mut count = 0; loop { println!("Count: {}", count); count += 1; if count == 5 { break; } }
- 示例:
-
for 循环
- 示例:
let numbers = vec![1, 2, 3, 4, 5]; for num in numbers { println!("Number: {}", num); }
- 示例:
-
条件分支 if-else
- 示例:
let num = 6; if num % 2 == 0 { println!("Even"); } else { println!("Odd"); }
- 示例:
-
循环标签
- 示例:
'outer: loop { println!("Entered the outer loop"); 'inner: loop { println!("Entered the inner loop"); break 'outer; // 退出外部循环 } }
- 示例:
-
循环控制 break 和 continue
- 示例:
for i in 1..=5 { if i == 3 { continue; // 跳过当前迭代,继续下一次迭代 } println!("Number: {}", i); if i == 4 { break; // 退出循环 } }
- 示例:
-
错误处理
- 示例:
fn read_file(file_path: &str) -> Result<String, std::io::Error> { let content = std::fs::read_to_string(file_path)?; Ok(content) }
- 示例:
-
异步 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) }
- 示例(在异步函数内部):
-
返回值
- 示例:
fn add(a: i32, b: i32) -> i32 { a + b // 返回值是 a 和 b 的和 }
- 示例:
-
方法调用
- 示例:
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()); }
- 示例: