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