web-dev-qa-db-fra.com

Comment spécifier un tableau const dans une portée globale dans Rust?

Lorsque j'ai essayé d'ajouter un tableau const dans la portée globale à l'aide de ce code:

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

J'ai eu l'erreur suivante:

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

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

La seule façon que j'ai trouvée pour résoudre ce problème est de spécifier la longueur dans le type:

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

Y a-t-il une meilleure façon? Il devrait être possible de créer un tableau sans compter manuellement ses éléments.

32
Oleg Eterevsky

En utilisant [T; N] est la manière appropriée de le faire dans la plupart des cas; de cette façon, il n'y a pas du tout de boxe de valeurs. Il existe cependant une autre méthode, qui est parfois utile, bien qu'elle soit légèrement moins efficace (en raison de l'indirection du pointeur): &'static [T]. Dans ton cas:-

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