"匹配"语句中"使用部分移动的值"错误

Mic*_*ael 2 rust

我的代码:

fn main() {
    let mut messages = vec![];

    let msg = Message::Write{message: "msg".to_string()};
    match msg {
        Message::Write{message} => println!("{}", message),
    };

    messages.push(msg);
}

enum Message {
    Write{message: String},
}
Run Code Online (Sandbox Code Playgroud)

错误:

error: use of partially moved value: `msg` [--explain E0382]
   --> <anon>:9:19
6   |>         Message::Write{message} => println!("{}", message),
    |>                        ------- value moved here
...
9   |>     messages.push(msg);
    |>                   ^^^ value used here after move
note: move occurs because `msg.message` has type `std::string::String`, which does not implement the `Copy` trait

error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

看起来该message字段的所有权在match块中发生了变化.我只是希望能够在将枚举值添加到枚举之前输出枚举的值Vec.我如何编译?

DK.*_*DK. 6

message通过引用而不是按值绑定到字段.

    match msg {
        Message::Write{ref message} => println!("{}", message),
    };
Run Code Online (Sandbox Code Playgroud)

  • @Michael [`ref`用于模式](https://doc.rust-lang.org/book/patterns.html#ref-and-ref-mut)通过引用绑定到一个位置.`&`在模式位置用于*解构*引用,允许您访问或绑定*后面的位置*. (2认同)
  • [本文](http://xion.io/post/code/rust-patterns-ref.html) 可能有助于理解其中的差异。 (2认同)