如何在持有自我引用的同时调用变异方法?

时间:2014-12-06 18:59:20

标签: rust

我在借阅检查器上遇到了困难。

for item in self.xxx.iter() {
    self.modify_self_but_not_xxx(item);
}

上面的代码之前我将一些代码重构为modify_self_but_not_xxx()

error: cannot borrow `*self` as mutable because `self.xxx` is also borrowed as immutable

如何在保持对self的引用时调用变异方法(例如,在for - 循环内)?

1 个答案:

答案 0 :(得分:7)

  

如何在保持对self的引用时调用变异方法(例如,在for - 循环内)?

你不能,这正是借款规则所阻止的。

主要想法是,在您的代码中,借用检查程序可能无法知道self.modify_self_but_not_xxx(..)不会修改xxx

但是,您可以改变self.yyy或任何其他参数,因此您可以:

  • 直接在你的循环体中进行modify_self_but_not_xxx(..)的计算
  • 定义一个辅助函数,使用可变引用来更新它们:

    fn do_computations(item: Foo, a: &mut Bar, b: &mut Baz) { /* ... */ }
    
    /* ... */
    
    for item in self.xxx.iter() {
        do_computations(item, &mut self.bar, &mut self.baz);
    }
    
  • 定义一个具有辅助方法的辅助结构