Есть похожих вопросов , но они не совсем отвечают моему точному варианту использования.
ApplicationState
имеет ребенка и родителя. У родителя также есть дочерний элемент, который должен быть тем же дочерним элементом в ApplicationState
. ApplicationState
должен «владеть» ребенком, а родитель должен иметь неизменную ссылку на ребенка. Как правильно структурировать и аннотировать график таким образом? Вот простой пример:
struct ApplicationState {
child: Child
parent: Parent
}
struct Child {
id: i32
}
struct Parent <'a> {
id: i32
child: &'a Child<'a>
}
impl ApplicationState {
fn new () -> Self {
let child = Child { id: 1 };
AppState {
child: child,
parent: Parent::new(&child)
}
}
}
impl Parent {
fn new (child: & Child) -> Self {
Parent {
id: 2,
child: child
}
}
fn getChildId (&self) -> i32 {
let id = self.id.copy();
id
}
}
Этот код не будет работать, потому что child заимствован из области видимости, но он должен продемонстрировать, что я пытаюсь сделать. В основном, запустите ApplicationState.parent.getChildId()
, чтобы вернуть 1.
Я мог бы, вероятно, использовать Box<Child>
, но тогда я размещаю данные в куче, которая менее эффективна. Кроме того, Child
все еще нужно будет мутировать через ApplicationState
.
Это кажется достаточно распространенной проблемой, но другие потоки, на которые я смотрел, эффективно говорят: «Не структурируйте ваши данные, которые путь "не помогают, когда есть основное требование ссылки.