如何在持有对 self 的引用的同时调用突变方法

  • 本文关键字:引用 调用 方法 突变 self 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 循环中(?

如何在持有对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);
    }
    
  • 定义具有帮助程序方法的帮助程序结构

最新更新