2014-12-06 62 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

相關問題