Подтвердить что ты не робот

Как указать массив const в глобальной области в 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];

Есть ли лучший способ? Должно быть возможно создать массив без ручного подсчета его элементов.

4b9b3361

Ответ 1

Использование [T; N] - правильный способ сделать это в большинстве случаев; таким образом, нет никакого бокса ценностей вообще. Однако есть и другой способ, который также полезен порой, хотя он немного менее эффективен (из-за косвенности указателя): &'static [T]. В вашем случае: -

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