方法中的Rust匹配结构属性失败借用检查器

时间:2016-11-29 15:16:05

标签: rust pattern-matching borrow-checker

#[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有单独的案例,这似乎很浪费。

0 个答案:

没有答案