update variable.md
This commit is contained in:
parent
cb15ef484b
commit
57ae037fae
|
@ -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], __);
|
||||||
}
|
}
|
||||||
```
|
```
|
Loading…
Reference in New Issue