部分移动

在单个变量的解构内,可以同时使用 by-moveby-reference 模式绑定。这样做将导致变量的部分移动(partial move),这意味着变量的某些部分将被移动,而其他部分将保留。在这种情况下,后面不能整体使用父级变量,但是仍然可以使用只引用(而不移动)的部分。

```rust ,editable fn main() {

  1. #[derive(Debug)]
  2. struct Person {
  3. name: String,
  4. age: u8,
  5. }
  6. let person = Person {
  7. name: String::from("Alice"),
  8. age: 20,
  9. };
  10. // `name` 从 person 中移走,但 `age` 只是引用
  11. let Person { name, ref age } = person;
  12. println!("The person's age is {}", age);
  13. println!("The person's name is {}", name);
  14. // 报错!部分移动值的借用:`person` 部分借用产生
  15. //println!("The person struct is {:?}", person);
  16. // `person` 不能使用,但 `person.age` 因为没有被移动而可以继续使用
  17. println!("The person's age from person struct is {}", person.age);

} ```

参见:

解构