Извинения, если это очень просто. Я учусь ржавчине и привыкаю к странной системе заимствований. Обычно, вы можете получить желаемое поведение, просто изменив синтаксис вызовов вашего метода, однако, в этом случае, похоже, теперь есть способ.
Упрощенная версия моего кода выглядит так: EventPump
if из SDL.
struct Example {
pump: EventPump
}
impl Example {
fn method(&mut self) {
for event in pump.poll_iter() {
self.other_method();
}
}
fn other_method(&self) {
}
}
Тем не менее, я получаю следующую ошибку:
error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable
--> src\game.rs:53:67
|
30 | for event in self.pump.poll_iter();
| ---------------------
| |
| mutable borrow occurs here
| mutable borrow later used here
...
53 | self.other_method();
| ^^^^ immutable borrow occurs here
Вероятно, есть какой-то правильный способ сделать это, чтобы моя структура могла поддерживать владение собой, но я Я не смог найти его.
Я пробовал следующее:
- Преврати его в некоторое время l oop с явным
while let event = iterator.next()
, та же ошибка - Делая функцию непостоянной, ошибка теперь говорит, что две изменяемые ссылки также не допускаются. Я предполагаю, что вся «неизменяемость» части сообщения об ошибке на самом деле не имеет значения.
Я мог бы, возможно, скопировать все содержимое итерируемого в вектор или что-то подобное, но это бы отрицательно сказалось на цели итератора. , а что если итератор не конечен? Должен быть лучший способ, правильно ...
Если бы кто-то с большим опытом ржавчины мог бы помочь мне, это было бы очень ценно.