1
我的代码:在“匹配”声明“使用的部分移动值”错误
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},
}
错误:
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
它看起来像的message
领域的变化在match
块所有权。我只想在输入enum的值之前输入Vec
。我如何进行编译?
工作,谢谢!我从来没有见过“ref”之前。只能用于“匹配”块吗? “ref”和“&”有什么区别? – Michael
@Michael ['ref'用于模式](https://doc.rust-lang.org/book/patterns.html#ref-and-ref-mut)通过引用绑定到某个位置。 '&'模式位置用于*解构*引用,允许您访问或绑定到位置*。 –
[本文](http://xion.io/post/code/rust-patterns-ref.html)可能有助于理解这种差异。 –