Cześć, mam oto taki problem. Mam metodę dla struktury np.pub fn calculate(&mut self) oraz prywatną metodę fn part_of_some_calc(&self) -> usize. Czyli ciało funkcji calculate, podzieliłem sobie na N prywatnych metod aby kod był ładnie poukładany i czytelny. Przykład:
impl MyStructExample
{
pub fn calculate(&mut self)
{
//rob cos
self.value = self.part_of_some_calc(); // cannot borrow `*self` as immutable because it is also borrowed as mutable
//rob cos
}
fn part_of_some_calc(&self) -> usize
{
//obliczenia
}
}
Problem polega na tym, że w funkcji calculate, nie mogę zawołać żadnej innej metody tej struktury bo mam typ parametru &mut self. Ręcę związane i już nigdzie głębiej nie mogę przekazać self. Problem wydaje mi się dość powszedni, natomiast nie potrafiłem znaleźć jednoznacznego rozwiązania. Czy to mój kod jest zły, niezgodny z ideą Rusta i należy go przebudowac, czy może jest na to jakiś pattern?
EDIT: Wybaczcie, problem jednak leży gdzie indziej, Sprostowanie, da się wołać prywatne metody, które mają parametr &self, gdzie metoda wywołująca ma parametr &mut self. Ehh wciąż walczę z ogarnięciem Rusta.
Bardziej kompletny przykład, gdzie mam błąd
pub fn calculate(&mut self)
{
for line in &mut self.data //std::vec::Vec<std::vec::Vec<u32>> czyli dwuwymiarowy vec. /mutable borrow occurs here
{
for field in line
{
*field = self.do_some_calculate(); //immutable borrow occurs here // gdzie fn do_some_calculate(&self)
}
}
}