如何返回常量值?

Tim*_*ick 1 rust

我想写一个小型阶乘库。请查看库主模块内的代码:

pub fn results() -> const [i8; 6] { [
      1,
      1,
      2,
      6,
     24,
    120,
    //720 is too large for i8.
] }

pub fn results() -> const [i32; 13] { [
              1,
              1,
              2,
              6,
             24,
            120,
            720,
          5_040,
         40_320,
        362_880,
      3_628_800,
     39_916_800,
    479_001_600,
    //6_227_020_800 is too large for i32.
] }
Run Code Online (Sandbox Code Playgroud)

对于第一个函数的返回类型,它给了我这个错误:

pub fn results() -> const [i8; 6] { [
      1,
      1,
      2,
      6,
     24,
    120,
    //720 is too large for i8.
] }

pub fn results() -> const [i32; 13] { [
              1,
              1,
              2,
              6,
             24,
            120,
            720,
          5_040,
         40_320,
        362_880,
      3_628_800,
     39_916_800,
    479_001_600,
    //6_227_020_800 is too large for i32.
] }
Run Code Online (Sandbox Code Playgroud)

目标是在编译时获取所有可能的阶乘值的数组。

Tim*_*ann 5

如果你想返回一个不可变的变量,你必须省略const. 在 Rust 中,变量默认是不可变的。这类似于声明一切const在 C++ 中声明所有内容。您可以通过引入可变性来选择退出。

\n\n
pub fn results() -> [i8; 6] {\n    unimplemented!()\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

更多信息请参阅官方书籍

\n\n
\n

默认情况下变量是不可变的。这是 Rust 为您提供的众多推动力之一,让您能够利用 Rust 提供的安全性和简单的并发性来编写代码。但是,您仍然可以选择使变量可变。让\xe2\x80\x99s 探索 Rust 如何以及为何鼓励你支持不变性,以及为什么有时你可能想要选择退出。

\n
\n\n

如果你想让你的函数在编译时评估,你需要const_fn功能,该功能仍在开发中。然而,它足够稳定,可以做你想做的事:

\n\n
pub const fn results() -> [i8; 6] {\n    [1, 1, 2, 6, 24, 120] // 720 is too large for i8.\n}\n
Run Code Online (Sandbox Code Playgroud)\n


She*_*ter 5

在编译时获取所有可能阶乘值的数组

只需声明常量值:

pub const RESULTS_I8: [i8; 6] = [1, 1, 2, 6, 24, 120];

pub const RESULTS_I32: [i32; 13] = [
    1,
    1,
    2,
    6,
    24,
    120,
    720,
    5_040,
    40_320,
    362_880,
    3_628_800,
    39_916_800,
    479_001_600,
];
Run Code Online (Sandbox Code Playgroud)

根本没有理由涉及函数,因为不需要计算!