web-dev-qa-db-ja.com

Rustのグローバルスコープでconst配列を指定する方法は?

このコードを使用してグローバルスコープに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];

もっと良い方法はありますか?要素を手動でカウントせずに配列を作成することが可能であるべきです。

32
Oleg Eterevsky

ほとんどの場合、[T; N]を使用するのが適切な方法です。そうすれば、値のボックス化はまったくありません。ただし、(ポインターの間接化のため)効率がやや劣りますが、時には便利な別の方法もあります:&'static [T]。あなたの場合:—

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