diff --git a/changelog.md b/changelog.md index 6748ff2e..25a7eaa4 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,12 @@ +# ChangeLog +记录一些值得注意的变更。 + +## 2022-02-25 + +- 新增 1.59 [版本说明](https://course.rs/appendix/rust-versions/1.59.html) +- 在变量绑定章节新增[解构式赋值](https://course.rs/basic/variable.html#解构式赋值) + ## 2022-02-24 - 进阶中的enum/整数类型转换、newtype章节被合并到**深入类型**目录中 -- 将 newtype 中的 Sized/DST 内容拆分成单独的章节,并扩展了相应内容 \ No newline at end of file +- 将 newtype 中的 Sized/DST 内容拆分成单独的章节,并扩展了相应内容 diff --git a/contents/basic/variable.md b/contents/basic/variable.md index 77799b41..2f742f8a 100644 --- a/contents/basic/variable.md +++ b/contents/basic/variable.md @@ -112,6 +112,21 @@ fn main() { } ``` +### 解构式赋值 +在 [Rust 1.59](https://course.rs/appendix/rust-versions/1.59.html) 版本后,我们可以在赋值语句的左式中使用元组、切片和结构体模式了。 +```rust +let (a, b, c, d, e); + +(a, b) = (1, 2); +[c, .., d, _] = [1, 2, 3, 4, 5]; +Struct { e, .. } = Struct { e: 5, f: 3 }; + +assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]); +``` + +这种使用方式跟之前的 `let` 保持了一致性,但是 `let` 会重新绑定,而这里仅仅是对之前绑定的变量进行再赋值。 + +需要注意的是,使用 `+=` 的赋值语句还不支持解构式赋值。 ### 变量和常量之间的差异