gpt4 book ai didi

rust - Rust 中函数引用的生命周期

转载 作者:行者123 更新时间:2023-11-29 07:54:21 25 4
gpt4 key购买 nike

因此,我试图将回调压缩到此枚举变体 (Visual) - 它将存储在结构 EntityComponents 中所见的向量中:

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

struct EntityComponents {
components_of_entity: HashMap<TypeId, Vec<Component>>,
}

但是,Rust 要求我在这里提供明确的生命周期参数。我的想法是我希望函数引用至少与其参数(Entity)一样长,但我不知道它的语法会是什么样子?有可能吗?

想法是只要一个Entity有一个Visual组件,我们就可以使用这个回调来渲染它!

最佳答案

一些事情:

  • 您使用了 &Fn()而不是 fn() .前者是 Fn 的特征对象trait,后者是一个很好的函数指针。虽然前者更通用(特别是,它支持闭包),但存储对位于其他地方的闭包的引用是相当不寻常的。
    • 因此,如果您还想存储闭包,您可能会使用 Box<Fn()>这可以解决您一生中的问题。
    • 如果你不关心闭包,只想保存函数指针,你可以简单地写Visual(fn(Entity)), .函数指针始终具有静态生命周期。所以这也解决了您一生的问题。
    • 但是如果你真的想存储对 Fn 的引用怎么办?特质对象,它住在别的地方?解决方案取决于它所在的位置:
    • Entity :参见here
    • somehere else: 用一辈子<'a>
  • 您写了 Fn(Entity) -> () . -> ()总是没用的,可以省略。

关于rust - Rust 中函数引用的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com