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
)的回调-它将存储在一个向量中,如struct
EntityComponents
中所示:

enum Component {
    Position([f64; 2]),
    Visual(& Fn(Entity) -> ()),
}

struct EntityComponents {
    components_of_entity: HashMap<TypeId, Vec<Component>>,
}
枚举组件{ 位置([f64;2]), 可视(&Fn(实体)->()), } 结构实体组件{ _实体的组件_:HashMap, } 然而,Rust要求我在这里提供显式的生命周期参数。 我的想法是,我希望函数引用至少和它的参数(
实体
)一样长,但我不知道它的语法是什么样子的?有可能吗

只要
实体
可视
组件,我们就可以使用这个回调来渲染它

有几件事:

  • 您使用了
    &Fn()
    而不是
    Fn()
    。前者是
    Fn
    trait的trait对象,后者是一个好的ol'函数指针。虽然前者更一般(特别是,它支持闭包),但存储对位于其他地方的闭包的引用是相当罕见的。
    • 因此,如果您也想存储闭包,您可能会使用
      ,它可以解决您的终身问题
    • 如果您不关心闭包,只想保存函数指针,那么只需编写
      Visual(fn(Entity)),
      。函数指针始终具有静态生存期。所以这也解决了你一生的问题
    • 但是,如果您真的想存储对
      Fn
      trait对象的引用,而该对象位于其他地方,该怎么办?解决方案取决于其所在位置:
    • 实体中
      :请参阅

    • somehere-else:使用终生
      嗨,Kim,我将文本中对代码元素的引用更改为使用常规内联代码格式。我希望你能接受!我肯定一个简单的函数指针会起作用,谢谢你的澄清!