#[derive(Debug)]
enum E {
Foo(u32),
Bar,
Baz
}
struct S { a: E }
impl S {
fn print(&self) {
match self.a {
E::Foo(a) => println!("{}", a),
e => println!("{:?}", e)
}
}
}
fn main() {
let a = S { a: E::Bar };
a.print();
}
此剪辑无法编译:
error[E0507]: cannot move out of borrowed content
--> main.rs:11:15
|
11 | match self.a {
| ^^^^ cannot move out of borrowed content
12 | E::Foo(a) => println!("{}", a),
13 | e => println!("{:?}", e)
| - hint: to prevent move, use `ref e` or `ref mut e`
我或多或少了解原因:self
拥有self.a
,而且因为我只在方法声明中借用了self
,所以我无法将self.a
移出self
。但我无法弄清楚解决这个问题的最佳方法是什么。显然我可以在这个人为的例子中使用ref e => println!("{:?}", e)
,但我正在寻找一个更一般的描述,我不能使用指针。我是否必须在匹配声明中复制self.a
?如果E::Baz
有单独的案例,这似乎很浪费。