代码之家  ›  专栏  ›  技术社区  ›  Fabien

在Rust中,如何定义一个值是函数结果的全局变量/常量?[副本]

  •  0
  • Fabien  · 技术社区  · 6 年前

    我有一个不带参数的函数,它生成并返回 Vec ,并且相应的结果总是相同的。我只想调用该函数一次,并将其结果存储在一个全局变量或常量中,程序中的所有函数都可以访问该变量或常量。我该怎么做?我的第一次尝试是试图定义 const 或A static ,但不允许这样做:

    error[E0015]: calls in statics are limited to struct and enum constructors
     --> src/main.rs:2:30
      |
    2 | static ALL: Vec<Knowledge> = Knowledge::all();
      |                              ^^^^^^^^^^^^^^^^
      |
    note: a limited form of compile-time function evaluation is available on a nightly compiler via `const fn`
     --> src/main.rs:2:30
      |
    2 | static ALL: Vec<Knowledge> = Knowledge::all();
      |                              ^^^^^^^^^^^^^^^^
    

    使用 let 在一个函数之外也不能工作。我该怎么办?是的,错误消息说我可以每晚使用,但我不想这样做,我更喜欢使用规范版本的语言。

    1 回复  |  直到 6 年前
        1
  •  1
  •   hellow Adolfo Casari    6 年前

    这取决于你的情况。
    如果你依赖于稳定的编译器,你最好的机会就是 lazy_static 机箱。

    如果您愿意对夜间编译器进行一些实验,可以尝试 const fn feature . 但请注意,对于const-fn的功能有一定的限制。