Rust中函数引用的生存期
因此,我试图压缩对这个枚举变量(Rust中函数引用的生存期,rust,lifetime,Rust,Lifetime,因此,我试图压缩对这个枚举变量(Visual)的回调-它将存储在一个向量中,如structEntityComponents中所示: enum Component { Position([f64; 2]), Visual(& Fn(Entity) -> ()), } struct EntityComponents { components_of_entity: HashMap<TypeId, Vec<Component>>, } 枚
Visual
)的回调-它将存储在一个向量中,如structEntityComponents
中所示:
enum Component {
Position([f64; 2]),
Visual(& Fn(Entity) -> ()),
}
struct EntityComponents {
components_of_entity: HashMap<TypeId, Vec<Component>>,
}
枚举组件{
位置([f64;2]),
可视(&Fn(实体)->()),
}
结构实体组件{
_实体的组件_:HashMap,
}
然而,Rust要求我在这里提供显式的生命周期参数。
我的想法是,我希望函数引用至少和它的参数(实体
)一样长,但我不知道它的语法是什么样子的?有可能吗
只要实体
有可视
组件,我们就可以使用这个回调来渲染它 有几件事:
- 您使用了
而不是&Fn()
。前者是Fn()
trait的trait对象,后者是一个好的ol'函数指针。虽然前者更一般(特别是,它支持闭包),但存储对位于其他地方的闭包的引用是相当罕见的。Fn
- 因此,如果您也想存储闭包,您可能会使用
,它可以解决您的终身问题框
- 如果您不关心闭包,只想保存函数指针,那么只需编写
。函数指针始终具有静态生存期。所以这也解决了你一生的问题Visual(fn(Entity)),
- 但是,如果您真的想存储对
trait对象的引用,而该对象位于其他地方,该怎么办?解决方案取决于其所在位置:Fn
- 在
:请参阅实体中
- somehere-else:使用终生
嗨,Kim,我将文本中对代码元素的引用更改为使用常规内联代码格式。我希望你能接受!我肯定一个简单的函数指针会起作用,谢谢你的澄清!
- 因此,如果您也想存储闭包,您可能会使用