1

我有以下代码(您可以在 play.rust-lang.org 上尝试):

pub enum InnerStream {
    Root,
    Transaction {
        v: Vec<u32>,
        parent: Box<InnerStream>,
    },
}

impl InnerStream {
    pub fn rollback(self) -> InnerStream {
        match self {
            InnerStream::Transaction { v: _v, parent } => match *parent {
                InnerStream::Root => InnerStream::Root,
                InnerStream::Transaction {
                    v,
                    parent: parent_parent,
                } => InnerStream::Transaction {
                    v,
                    parent: parent_parent,
                },
            },
            InnerStream::Root { .. } => panic!("Cannot rollback root stream."),
        }
    }
}

fn main() {}

(这是一个例子,不是真实的,如果它看起来没用也不要担心)

对我来说看起来不错,但是借用检查器给了我以下错误:

error[E0382]: use of collaterally moved value: `(parent as InnerStream::Transaction).parent`
  --> src/main.rs:16:29
   |
15 |                     v,
   |                     - value moved here
16 |                     parent: parent_parent,
   |                             ^^^^^^^^^^^^^ value used here after move
   |
   = note: move occurs because the value has type `std::vec::Vec<u32>`, which does not implement the `Copy` trait

这个错误的原因是什么,我该如何解决?

4

0 回答 0