mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-14 04:41:49 +08:00
fix: make the symbols consistent
This commit is contained in:
parent
2e2f861b5e
commit
6b9b518c01
@ -80,11 +80,11 @@
|
||||
| 符号 | 解释 |
|
||||
|--------|-------------|
|
||||
| `'ident` | 命名生命周期或循环标签 |
|
||||
| `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 |
|
||||
| `...u8`, `...i32`, `...f64`, `...usize` 等 | 指定类型的数值常量 |
|
||||
| `"..."` | 字符串常量 |
|
||||
| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值, 未处理的转义字符 |
|
||||
| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值,未处理的转义字符 |
|
||||
| `b"..."` | 字节字符串字面值; 构造一个字节数组类型而非字符串 |
|
||||
| `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 |
|
||||
| `br"..."`, `br#"..."#`, `br##"..."##` 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 |
|
||||
| `'...'` | 字符字面值 |
|
||||
| `b'...'` | ASCII 码字节字面值 |
|
||||
| <code>|...| expr</code> | 闭包 |
|
||||
|
@ -241,7 +241,7 @@ fn first_word<'a>(s: &'a str) -> &'a str {
|
||||
|
||||
第二条规则是如果只有一个输入生命周期参数,那么它被赋予所有输出生命周期参数:`fn foo<'a>(x: &'a i32) -> &'a i32`。
|
||||
|
||||
第三条规则是如果方法有多个输入生命周期参数并且其中一个参数是 `&self` 或 `&mut self`,说明是个对象的方法(method)(译者注: 这里涉及rust的面向对象参见17章), 那么所有输出生命周期参数被赋予 `self` 的生命周期。第三条规则使得方法更容易读写,因为只需更少的符号。
|
||||
第三条规则是如果方法有多个输入生命周期参数并且其中一个参数是 `&self` 或 `&mut self`,说明是个对象的方法(method)(译者注: 这里涉及rust的面向对象参见17章),那么所有输出生命周期参数被赋予 `self` 的生命周期。第三条规则使得方法更容易读写,因为只需更少的符号。
|
||||
|
||||
假设我们自己就是编译器。并应用这些规则来计算示例 10-26 中 `first_word` 函数签名中的引用的生命周期。开始时签名中的引用并没有关联任何生命周期:
|
||||
|
||||
|
@ -18,13 +18,13 @@
|
||||
|
||||
<span class="caption">示例 18-8: 尝试在 `let` 中使用可反驳模式</span>
|
||||
|
||||
如果 `some_option_value` 的值是 `None`,其不会成功匹配模式 `Some(x)`,表明这个模式是可反驳的。然而, 因为 `let` 对于 `None` 匹配不能产生任何合法的代码,所以 `let` 语句只能接受不可反驳模式。Rust 会在编译时抱怨我们尝试在要求不可反驳模式的地方使用可反驳模式:
|
||||
如果 `some_option_value` 的值是 `None`,其不会成功匹配模式 `Some(x)`,表明这个模式是可反驳的。然而,因为 `let` 对于 `None` 匹配不能产生任何合法的代码,所以 `let` 语句只能接受不可反驳模式。Rust 会在编译时抱怨我们尝试在要求不可反驳模式的地方使用可反驳模式:
|
||||
|
||||
```console
|
||||
{{#include ../listings/ch18-patterns-and-matching/listing-18-08/output.txt}}
|
||||
```
|
||||
|
||||
因为我们没有覆盖(也不可能覆盖!)到模式 `Some(x)` 的每一个可能的值, 所以 Rust 会合理地抗议。
|
||||
因为我们没有覆盖(也不可能覆盖!)到模式 `Some(x)` 的每一个可能的值,所以 Rust 会合理地抗议。
|
||||
|
||||
为了修复在需要不可反驳模式的地方使用可反驳模式的情况,可以修改使用模式的代码:不同于使用 `let`,可以使用 `if let`。如此,如果模式不匹配,大括号中的代码将被忽略,其余代码保持有效。示例 18-9 展示了如何修复示例 18-8 中的代码。
|
||||
|
||||
@ -50,4 +50,4 @@ Rust 会抱怨将不可反驳模式用于 `if let` 是没有意义的:
|
||||
|
||||
基于此,`match`匹配分支必须使用可反驳模式,除了最后一个分支需要使用能匹配任何剩余值的不可反驳模式。Rust允许我们在只有一个匹配分支的`match`中使用不可反驳模式,不过这么做不是特别有用,并可以被更简单的 `let` 语句替代。
|
||||
|
||||
目前我们已经讨论了所有可以使用模式的地方, 以及可反驳模式与不可反驳模式的区别,下面让我们一起去把可以用来创建模式的语法过目一遍吧。
|
||||
目前我们已经讨论了所有可以使用模式的地方,以及可反驳模式与不可反驳模式的区别,下面让我们一起去把可以用来创建模式的语法过目一遍吧。
|
||||
|
Loading…
Reference in New Issue
Block a user