无法移出self.attribute上Box :: into_raw的借用内容

时间:2018-01-03 09:20:21

标签: rust borrow-checker

pub struct Themepark {
    attraction: Box<Attraction>
}

注意Attraction是一个特质!

impl Themepark {

    pub fn open(&mut self) -> Result<(), ()> {

        let attraction = Box::into_raw(self.attraction);

    ...
    }

}

给了我

> cannot move out of borrowed content

self.attraction

中的Box::into_raw

现在我明白了特定的错误消息意味着什么,但我不明白如何解决它,因为Box::into_raw期望Box<T>作为参数,而不是参考或任何东西。

https://doc.rust-lang.org/std/boxed/struct.Box.html#method.into_raw

1 个答案:

答案 0 :(得分:3)

您可以在self.attraction上使用该功能,同时可变地借用self;按照其文档中的第一行:

  

消费Box

您需要.clone()或使用消耗self的功能(例如fn open(self))。

我建议重新阅读The Rust Book's chapter on Ownership