如何在Rust中指定全局范围内的const数组?

时间:2014-05-22 14:42:10

标签: arrays static literals rust

当我尝试使用以下代码在全局范围内添加const数组时:

static NUMBERS: [i32] = [1, 2, 3, 4, 5];

我收到以下错误:

error: mismatched types:
 expected `[i32]`,
    found `[i32; 5]`
(expected slice,
    found array of 5 elements) [E0308]

static NUMBERS2: [i32] = [1, 2, 3, 4, 5];
                         ^~~~~~~~~~~~~~~

我发现处理此问题的唯一方法是在类型中指定长度:

static NUMBERS: [i32; 5] = [1, 2, 3, 4, 5];

有更好的方法吗?应该可以创建一个数组,而无需手动计算其元素。

2 个答案:

答案 0 :(得分:35)

在大多数情况下,使用[T; N]是正确的方法;这样就没有任何拳击价值。但是,还有另一种方法,它有时也很有用,但效率略低(由于指针间接):&'static [T]。在你的情况下: -

static NUMBERS: &'static [i32] = &[1, 2, 3, 4, 5];

答案 1 :(得分:3)

您可以使用 const,这是一个示例:

const NUMBERS: &'static [i32] = &[1, 2, 3, 4, 5];