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