Skip to content

Commit

Permalink
rust match
Browse files Browse the repository at this point in the history
  • Loading branch information
realgeoffrey committed Sep 13, 2024
1 parent 8a4c242 commit 066e84b
Showing 1 changed file with 38 additions and 1 deletion.
39 changes: 38 additions & 1 deletion 网站前端/Rust学习笔记/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@
}
```
</details>
1. if表达式`if-else`(`else if`)、`match`
1. if表达式`if-else`(`else if`)
`if 条件表达式arms {}`,都是表达式,返回代码块的值。
Expand All @@ -331,6 +331,43 @@
2. if表达式 的每个分支的可能的返回值都必须是相同类型;否则报错。
>Rust 需要在编译时就确切的知道 变量的类型,这样它就可以在编译时验证在每处使用的 变量的类型是有效的。如果 类型仅在运行时确定,则 Rust 无法做到这一点;且编译器必须跟踪每一个变量的多种假设类型,那么它就会变得更加复杂,对代码的保证也会减少。
1. `match`
`match 表达式 { 值1 => 返回值, 值2 => { 其他语句; 返回值 } }`返回某一个分支中返回的值
1. match表达式可以是任意类型
2. match分支返回值,必须是相同类型;否则报错。
3. match必须被穷尽
1. match分支匹配值(或匹配`Option<T>`),必须覆盖match表达式的所有类型(匹配值或匹配数据类型);否则报错。(不存在匹配不上match表达式的情况)
2. 通配模式:任意变量名
若不需要使用匹配值,则用`_`占位符替代任意变量名。若也没有返回值的话,则用`_ => ()`。
4. `if let`
<details>
<summary>e.g.</summary>
```rust
let mut count = 0;
match coin {
Coin::Quarter(state) => println!("State quarter from {state:?}!"),
_ => count += 1,
}
```
等价于
```rust
let mut count = 0;
if let Coin::Quarter(state) = coin {
println!("State quarter from {state:?}!");
} else {
count += 1;
}
```
</details>
1. 循环`loop`、`while`、`for-in`
1. `break`退出循环并设置当前表达式值。;`continue`跳过当前循环并进行下一次循环。
Expand Down

0 comments on commit 066e84b

Please sign in to comment.