【发布时间】:2019-06-13 12:38:19
【问题描述】:
考虑这个例子:
struct Item {
x: u32,
}
impl Item {
pub fn increment(self, amount: u32) -> Self {
Item { x: self.x + amount }
}
}
struct Container {
item: Item,
}
impl Container {
pub fn increment_item(&mut self, amount: u32) {
// This line causes "cannot move out of borrowed content"
self.item = self.item.increment(amount);
}
}
如您所见,Item.increment 使用该项目并返回一个新实例。
在Container.increment_item 中,我想用Item.increment 返回的项替换当前项,但编译器用cannot move out of borrowed content 错误对我大喊大叫。
在Container.increment_item self 是mut 所以我可以改变它的字段,我不明白为什么编译器不允许我这样做。
我知道我可以让Container.increment_item 消耗self 并返回一个新对象,就像Item.increment 一样,它可以工作,但我想了解为什么我会收到错误以及如何修复当我真的不能消耗容器时。
【问题讨论】:
标签: rust borrow-checker