Как я могу сообщить средству проверки заимствования, что мой вызов не приведет к каким-либо «побочным» изменениям свойства вектора в этом конкретном случае.
struct Element {}
struct A {
b: Vec<Element>,
count: i32,
}
impl A {
fn do_thing(&self) {
// does thing without causing side-effects (ie: do some calculations using self.count)
}
fn do_thing_mut(&mut self) -> Option<&mut Element> {
for el in self.b.iter_mut() {
self.do_thing(); // <-- causes the error
if condition_is_met {
return Some(el);
}
}
None
}
}
В противном случае, что я могу делать неправильно здесь?
Я хочу вернуть изменяемую ссылку для векторного элемента на основе заданного условия. Я обновлю код примера.
Итак, я нашел более безопасный способ обойти это для тех, кому это может быть интересно. Я изменил способ итерации цикла for по индексу. Затем я возвращаю соответствующий элемент вектора, используя Vec::get_mut
.
fn do_thing_mut(&mut self) -> Option<&mut Element> {
for el in self.b.iter() {
self.do_thing();
if condition_is_met {
return self.b.get_mut(0);
}
}
None
}
Почему вы хотите использовать iter_mut, а не iter()?