Я изучаю ржавчину, и у меня проблема с дизайном какой-то машины с отслеживанием состояния, минимальный пример будет примерно таким:
struct Bar {
x: u32
}
struct Foo {
v: Vec<Bar>,
}
impl Foo {
fn foo(&mut self, x: usize) {
self.bar(&self.v[x]);
}
fn bar(&mut self, b: &Bar) {
self.v.push(Bar{x: b.x});
}
}
проблема, очевидно, связана с ошибкой компилятора: "не может заимствовать *self
как изменяемый, потому что он также заимствован как неизменяемый ", в строке:" self.bar (& self.v [x]) "я в значительной степени понимаю ошибку и ищу несколько способов решения проблемы , поскольку я точно знаю, что я не мутирую вектор "v", я уже знаю метод RefCell и ищу все возможности только для лучшего понимания ржавчины.
I ' м открыт с любыми идеями, всем спасибо!