如何返回一个常量值?

时间:2018-07-02 13:46:33

标签: 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.
] }

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

error: expected type, found keyword `const`
 --> src/main.rs:1:21
  |
1 | pub fn results() -> const [i8; 6] { [
  |                     ^^^^^

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

2 个答案:

答案 0 :(得分:3)

  

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

只需声明常量值:

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

完全没有必要包含一个函数,因为不需要计算!

答案 1 :(得分:2)

如果要返回不可变的变量,则必须省略google.com。在Rust中,默认情况下变量是不可变的。这类似于在C ++中声明所有const。您可以通过引入可变性来选择退出。

const

有关更多信息,请参见official book

  

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

如果要在编译时评估函数,则需要(当前)不稳定功能const_fn。您需要使用每晚编译器来启用功能。

pub fn results() -> [i8; 6] {
    unimplemented!()
}