Rust 如何返回常量值?

Rust 如何返回常量值?,rust,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,

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

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.
] }
它为第一个函数的返回类型提供了以下错误:

错误:应为类型,找到关键字`const`
-->src/main.rs:1:21
|
1 | pub fn results()->const[i8;6]{[
|                     ^^^^^

< P> >目标是在编译时得到所有可能的阶乘值的数组。

< P>如果要返回不可变的变量,则必须省略<代码> const 。在鲁斯特中,变量默认是不可变的。这类似于在C++中声明所有的代码<代码> const < /C> >。
pub fn results() -> [i8; 6] {
    unimplemented!()
}
有关更多信息,请参阅:

默认情况下,变量是不可变的。这是Rust为您提供的许多推动之一,可以让您以一种利用Rust提供的安全性和简单并发性的方式编写代码。但是,您仍然可以选择使变量可变。让我们来探讨Rust如何以及为什么鼓励您支持不可变性,以及为什么有时您可能蚂蚁选择退出

如果要在编译时对函数进行求值,则需要该功能,该功能仍在开发中。但是,它足够稳定,可以满足您的需要:

pub const fn results() -> [i8; 6] {
    [1, 1, 2, 6, 24, 120] // 720 is too large for i8.
}
在编译时获取所有可能的阶乘值的数组

只需声明常量值:

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,
];

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

你到底想解决什么问题?“我不能只定义结果常量,因为我会有多个同名常量,这是禁止的。”,什么?这些编译时常量包括所有内置整数的所有可能的阶乘结果。我想把它变成一个库,这样我就不必一次又一次地键入这些硬编码的值。为了适应生锈、货物和库。请补充你的问题,你不想返回
常量[i8;6]
但是让函数在编译时计算。我想使用函数以便可以推断类型。但是我想我会这样做,直到
const fn
变得稳定。@TimonPaßlick类型可能被推断-什么类型的推断?这个答案中的显式类型与您建议的代码中的显式类型一样多。..ThaNK,我不知道。我习惯了C++类型的系统。