Я хочу, чтобы дочерняя структура меняла родительскую структуру. Пример:Имея ребенка изменить его родителя
// Problem: Having a struct's field modify the struct in which the field is.
// MUST NOT be copyable nor clonable
struct Updatee {
value: u64,
updater: Updater
}
impl Updatee {
fn update(&mut self) {
// ERROR: cannot borrow `*self` as mutable more than once at a time
self.updater.update(self);
}
}
// MUST NOT be copyable nor clonable
struct Updater {
value: u64
}
impl Updater {
fn update(&mut self, updatee: &mut Updatee) {
self.value = self.value + 1;
updatee.value = self.value;
}
}
fn main() {
let updater = Updater { value: 0 };
let updatee = Updatee { value: 0, updater: updater };
updatee.update();
updatee.update();
assert_eq!(2, updatee.value);
}
Я уверен, что это может быть сделано с небезопасными блоками, но есть ли альтернатива?
Возможно, мой код не идиоматичен?
'self.updater.update (self);' Вам даже не нужно это делать. Rust очень вдохновляет функциональное программирование, я не думаю, что вы хотели бы иметь этот дизайн даже в OO-тяжелом langauge, таком как Java. –
Почему вы нуждаетесь в обновлении для обновления. –
Также ... вам нужно использовать явные времена жизни ... для такой настройки. –