|
|
|
@ -97,7 +97,36 @@ The value of x is: 6
|
|
|
|
|
|
|
|
|
|
例如,在使用大型数据结构或者热点代码路径(被大量频繁调用)的情形下,在同一内存位置更新实例可能比复制并返回新分配的实例要更快。使用较小的数据结构时,通常创建新的实例并以更具函数式的风格来编写程序,可能会更容易理解,所以值得以较低的性能开销来确保代码清晰。
|
|
|
|
|
|
|
|
|
|
### 变量解构
|
|
|
|
|
## 使用下划线开头忽略未使用的变量
|
|
|
|
|
|
|
|
|
|
如果你创建了一个变量却不在任何地方使用它,Rust 通常会给你一个警告,因为这可能会是个 BUG。但是有时创建一个不会被使用的变量是有用的,比如你正在设计原型或刚刚开始一个项目。这时**你希望告诉 Rust 不要警告未使用的变量,为此可以用下划线作为变量名的开头**:
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
fn main() {
|
|
|
|
|
let _x = 5;
|
|
|
|
|
let y = 10;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
使用 `cargo run` 运行下试试:
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
warning: unused variable: `y`
|
|
|
|
|
--> src/main.rs:3:9
|
|
|
|
|
|
|
|
|
|
|
3 | let y = 10;
|
|
|
|
|
| ^ help: 如果 y 故意不被使用,请添加一个下划线前缀: `_y`
|
|
|
|
|
|
|
|
|
|
|
= note: `#[warn(unused_variables)]` on by default
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
可以看到,两个变量都是只有声明,没有使用,但是编译器却独独给出了 `y` 未被使用的警告,充分说明了 `_` 变量名前缀在这里发挥的作用。
|
|
|
|
|
|
|
|
|
|
值得注意的是,这里编译器还很善意的给出了提示( Rust 的编译器非常强大,这里的提示只是小意思 ): 将 `y` 修改 `_y` 即可。这里就不再给出代码,留给大家手动尝试并观察下运行结果。
|
|
|
|
|
|
|
|
|
|
更多关于 `_x` 的使用信息,请阅读后面的[模式匹配章节](https://course.rs/basic/match-pattern/all-patterns.html?highlight=_#使用下划线开头忽略未使用的变量)。
|
|
|
|
|
|
|
|
|
|
## 变量解构
|
|
|
|
|
|
|
|
|
|
`let` 表达式不仅仅用于变量的绑定,还能进行复杂变量的解构:从一个相对复杂的变量中,匹配出该变量的一部分内容:
|
|
|
|
|
|
|
|
|
@ -125,6 +154,7 @@ fn main() {
|
|
|
|
|
let (a, b, c, d, e);
|
|
|
|
|
|
|
|
|
|
(a, b) = (1, 2);
|
|
|
|
|
// _ 代表匹配一个值,但是我们不关心具体的值是什么,因此没有是一个变量名而是使用了 _
|
|
|
|
|
[c, .., d, _] = [1, 2, 3, 4, 5];
|
|
|
|
|
Struct { e, .. } = Struct { e: 5 };
|
|
|
|
|
|
|
|
|
@ -138,7 +168,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
> 这里用到了模式匹配的一些语法,如果大家看不懂没关系,可以在学完模式匹配章节后,再回头来看。
|
|
|
|
|
|
|
|
|
|
### 变量和常量之间的差异
|
|
|
|
|
## 变量和常量之间的差异
|
|
|
|
|
|
|
|
|
|
变量的值不能更改可能让你想起其他另一个很多语言都有的编程概念:**常量**(_constant_)。与不可变变量一样,常量也是绑定到一个常量名且不允许更改的值,但是常量和变量之间存在一些差异:
|
|
|
|
|
|
|
|
|
@ -157,7 +187,7 @@ const MAX_POINTS: u32 = 100_000;
|
|
|
|
|
|
|
|
|
|
> 在实际使用中,最好将程序中用到的硬编码值都声明为常量,对于代码后续的维护有莫大的帮助。如果将来需要更改硬编码的值,你也只需要在代码中更改一处即可。
|
|
|
|
|
|
|
|
|
|
### 变量遮蔽(shadowing)
|
|
|
|
|
## 变量遮蔽(shadowing)
|
|
|
|
|
|
|
|
|
|
Rust 允许声明相同的变量名,在后面声明的变量会遮蔽掉前面声明的,如下所示:
|
|
|
|
|
|
|
|
|
|