初始化常量数组的简单方法

Rah*_*ahn 1 constants rust

我希望定义一个可FIBONACCI_SEQUENCE全局访问的常量数组(在本例中),其项目可以使用 const 函数(fib()在本例中)进行计算。

初始化数组时,我必须手动输入[fib(0), fib(1), fib(2)...]直到最后一个。有没有一种简单的方法可以用类似的东西初始化它[fib(i) for i in 0..200]

斐波那契数列只是这里的一个示例,实际的用户情况要复杂得多。

pub const fn fib(n: i32) -> i32 {
    if n <= 1 {
        return n;
    }
    return fib(n-1) + fib(n-2);
}

const FIBONACCI_SEQUENCE: [i32; 3] = [fib(0), fib(1), fib(2)];


fn main() {}
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 5

最简单的方法是首先用零初始化数组,然后在while循环中分配所需的值:

const FIBONACCI_SEQUENCE: [i32; 20] = {
    let mut seq = [0; 20];
    let mut i = 0;
    while i < 20 {
        seq[i] = fib(i as i32);
        i += 1;
    }
    seq
};
Run Code Online (Sandbox Code Playgroud)

forconst 上下文中还不允许循环,但总体来说还不错。