У меня есть структура, содержащая вектор, элементы которого должны иметь возможность изменять другие элементы в векторе.
Я пытался сделать это так:
use core::cell::RefCell;
struct Go {
car: i32,
}
impl Go {
pub fn attack(&mut self, val: &mut Self) {
val.car = self.car;
self.car = 5;
}
}
struct World {
pub params: RefCell<Vec<Go>>,
pub val: i32,
}
fn main() {
let world = World {
params: RefCell::new(vec![]),
val: 42,
};
for m in 0..10 {
world.params.borrow_mut().push(Go { car: m });
}
world.params.borrow()[5].attack(&mut world.params.borrow()[6]);
}
детская площадка
Однако я получил эти ошибки
error[E0596]: cannot borrow data in a dereference of `std::cell::Ref<'_, std::vec::Vec<Go>>` as mutable
--> src/main.rs:29:5
|
29 | world.params.borrow()[5].attack(&mut world.params.borrow()[6]);
| ^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `std::cell::Ref<'_, std::vec::Vec<Go>>`
error[E0596]: cannot borrow data in a dereference of `std::cell::Ref<'_, std::vec::Vec<Go>>` as mutable
--> src/main.rs:29:42
|
29 | world.params.borrow()[5].attack(&mut world.params.borrow()[6]);
| ^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `std::cell::Ref<'_, std::vec::Vec<Go>>`
Как мне это сделать? Также обратите внимание, что из-за некоторых ограничений я не хочу создавать никаких дополнительных переменных в главной функции.
Функция атаки работает как функция обновления для различных элементов ve c в основной программе. Я должен бежать