update variable.md

This commit is contained in:
sunface 2022-02-28 17:06:50 +08:00
parent cb15ef484b
commit 57ae037fae
1 changed files with 21 additions and 15 deletions

View File

@ -1,10 +1,11 @@
# 变量绑定与解构
### 绑定和可变性
🌟 修复下面代码的错误并尽可能少的修改
🌟 变量只有在初始化后才能被使用
```rust,editable
// 修复下面代码的错误并尽可能少的修改
fn main() {
let x: i32; // 未初始化,但被使用
let y: i32; // 未初始化,也未被使用
@ -12,11 +13,11 @@ fn main() {
}
```
🌟🌟 完形填空,让代码编译
🌟🌟 可以使用 `mut` 将变量标记为可变
```rust,editable
// 完形填空,让代码编译
fn main() {
// 使用合适的变量名替代 __
let __ = 1;
__ += 2;
@ -25,9 +26,11 @@ fn main() {
```
### 变量作用域
🌟 修复下面代码的错误并使用尽可能少的改变
🌟 作用域是一个变量在程序中能够保持合法的范围
```rust,editable
// 修复下面代码的错误并使用尽可能少的改变
fn main() {
let x: i32 = 10;
{
@ -38,9 +41,10 @@ fn main() {
}
```
🌟🌟 使用你所掌握的知识来修复错误
```rust,editable
🌟🌟
```rust,editable
// 修复错误
fn main() {
println!("{}, world", x);
}
@ -51,10 +55,11 @@ fn define_x() {
```
### 变量遮蔽( Shadowing )
🌟🌟 只允许修改 `assert_eq!` 来让 `println!` 工作(在终端输出 `42`)
🌟🌟 若后面的变量声明的名称和之前的变量相同,则我们说:第一个变量被第二个同名变量遮蔽了( shadowing )
```rust,editable
// 只允许修改 `assert_eq!` 来让 `println!` 工作(在终端输出 `42`)
fn main() {
let x: i32 = 5;
{
@ -104,12 +109,13 @@ fn main() {
```
### 变量解构
🌟🌟 修复下面代码的错误并尽可能少的修改
🌟🌟 我们可以将 `let` 跟一个模式一起使用来解构一个元组,最终将它解构为多个独立的变量
> 提示: 可以使用变量遮蔽或可变性
```rust,editable
// 修复下面代码的错误并尽可能少的修改
fn main() {
let (x, y) = (1, 2);
x += 2;
@ -120,19 +126,19 @@ fn main() {
```
### 解构式赋值
🌟🌟 使用两种方式解决问题:
该功能于 Rust 1.59 版本引入:你可以在赋值语句的左式中使用元组、切片或结构体进行匹配赋值。
- 通过变量遮蔽: 添加 `let`
- 令类型兼容
🌟🌟
> Note: 解构式赋值只能在 Rust 1.59 或者更高版本中使用
```rust,editable
fn main() {
let (mut x, mut y) = (1.0, 2.0);
(x,y) = (3, 4);
assert_eq!([x,y],[3, 4]);
let (x, y);
(x,..) = (3, 4);
[.., y] = [1, 2];
// 填空,让代码工作
assert_eq!([x,y], __);
}
```