如何在引用的 Vec 上使用生命周期?
How to work with lifetimes on a Vec of references?
我试图在嵌套层次结构中保存一个引用向量(克隆不是一种选择),但我在掌握生命周期方面遇到了麻烦。
我试图在这里总结我的代码:
struct A {
b: B,
c: C,
}
impl A {
fn add(&mut self) {
for i in self.b.d.iter() {
self.c.e.push(&i);
}
}
}
struct B {
d: Vec<E>,
}
struct C {
e: Vec<&E>,
}
struct E {}
我正在 运行 模拟并将单个结果存储在 B
中,然后仅选取其中的一个子集进行可视化,因此 Vec
在 C
每帧都被编译、渲染和丢弃。
我的实际层次结构比这更复杂,但我希望如果我理解了这个问题,我将能够扩展它。
如何在这里设置生命周期?这甚至是惯用的 Rust 方式还是我应该重新组织我的实体?
so the Vec
in C
is compiled, rendered and discarded each frame
如果您只需要临时使用结构 C
的实例,那么将它们存储为结构 A
.
的一部分没有多大用处
相反,我建议在 A
的 impl
中添加一个 get_c
函数,它只是动态生成一个 C
(或者,完全没有和有这个功能只是 return a Vec<&E>
)
我试图在嵌套层次结构中保存一个引用向量(克隆不是一种选择),但我在掌握生命周期方面遇到了麻烦。
我试图在这里总结我的代码:
struct A {
b: B,
c: C,
}
impl A {
fn add(&mut self) {
for i in self.b.d.iter() {
self.c.e.push(&i);
}
}
}
struct B {
d: Vec<E>,
}
struct C {
e: Vec<&E>,
}
struct E {}
我正在 运行 模拟并将单个结果存储在 B
中,然后仅选取其中的一个子集进行可视化,因此 Vec
在 C
每帧都被编译、渲染和丢弃。
我的实际层次结构比这更复杂,但我希望如果我理解了这个问题,我将能够扩展它。
如何在这里设置生命周期?这甚至是惯用的 Rust 方式还是我应该重新组织我的实体?
so the
Vec
inC
is compiled, rendered and discarded each frame
如果您只需要临时使用结构 C
的实例,那么将它们存储为结构 A
.
相反,我建议在 A
的 impl
中添加一个 get_c
函数,它只是动态生成一个 C
(或者,完全没有和有这个功能只是 return a Vec<&E>
)