У меня есть код, создающий сообщение об ошибке, помеченное в его комментариях. Я думаю, что я понимаю сообщение: я хочу заимствовать родителя два раза: один раз для поиска своего ребенка и один раз в качестве аргумента для ребенка (и изменяемые/неизменяемые слова в ошибке не актуальны). Я должен доказать, что Child
не исчезает, когда он изменяет Parent
. Но я не знаю, как это сделать. Я мог бы Rc<Child>
все, кроме швов, расточительно, поэтому я надеюсь, что добавление некоторых жизней сделает трюк.Заимствование на отношения родитель-ребенка
struct Parent {
used: i32,
child: Child,
}
struct Child {
dummy: i32,
}
impl Child {
fn use_parent(&mut self, parent: &mut Parent) {
// use both child and parent
parent.used += self.dummy;
self.dummy += 1;
}
}
fn main() {
let parent = Parent {
used: 0,
child: Child {
dummy: 1
}
};
//Error: cannot borrow immutable local variable `parent` as mutable
parent.child.use_parent(&mut parent);
}
Предположим, что я удаляю строку self.dummy + = 1; поэтому есть только один измененный псевдоним - могу ли я заставить это работать? – hyperman
вы можете иметь только одну изменяемую ссылку ИЛИ любое количество неизменяемых ссылок. никакие другие комбинации не возможны –
В принципе, как я понимаю, вы, ребята, мне нужно использовать Rc + RefCell и взять некоторые накладные расходы или войти в небезопасный мир. Я постараюсь пойти с Rc + RefCell на данный момент, производительность здесь не такая уж важная. Поскольку я сейчас сражаюсь с Rc, в ближайшем будущем может возникнуть проблема с stackoverflow, но сначала я попробую еще кое-что о себе. – hyperman