2014-12-06 10 views
6

Mam trudny czas z narzędziem do wypożyczania.Jak mogę wywołać metodę mutacji, trzymając odwołanie do siebie?

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

Powyższy kod pracował przed I refactored jakiś kod do modify_self_but_not_xxx():

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

Jak mogę wywołać metodę mutowania trzymając odniesienie do self (np ciągu for -loop) ?

Odpowiedz

6

Jak mogę wywołać metodę mutacji, trzymając odwołanie do self (np. Z wewnątrz-for -loop)?

Nie możesz, dokładnie to zapobiegają reguły pożyczania.

Głównym założeniem jest to, że w twoim kodzie, narzędzie sprawdzające wypożyczenie nie może wiedzieć, że self.modify_self_but_not_xxx(..) nie zmieni xxx.

Jednak można zmutować self.yyy lub jakiekolwiek inne parametry, więc albo można:

  • wykonać obliczenia dotyczące modify_self_but_not_xxx(..) bezpośrednio w ciele pętli
  • zdefiniować funkcję pomocnika sklejaniu referencje zmienny do ich aktualizacji :

    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); 
    } 
    
  • zdefiniować struct pomocnika, który ma metody pomocnika
+0

Dzięki, rozumiem teraz. ** Wnioski: ** podczas projektowania funkcji unikaj odwoływania się do "siebie", jeśli to możliwe - nie pożyczaj więcej niż to, co jest minimum konieczne. – MarkOfDarkness

Powiązane problemy