2014-12-06 65 views
6

我和借方检查员很难过。如何在持有对自己的引用时调用变异方法?

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 

如何可以调用一个不同诱变方法而(从for -loop内例如)保持到self参考?

回答

6

如何在调用self时调用突变方法(例如在for -loop内)?

你不能,这正是借款规则所预防的。

主要思想是在你的代码中,借用检查器不可能知道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); 
    } 
    
  • 定义具有辅助方法的辅助结构
+0

谢谢,我现在明白了。 **经验教训:**在设计函数时尽可能避免引用“自我” - 不要借用超过最低限度需要的东西。 – MarkOfDarkness 2014-12-08 07:56:33

相关问题