Je crois avoir un problème avec le type de données et la propriété de Où est ma mauvaise idée? p> p> iTER code>. Il est d'abord déclaré à l'intérieur du
pour code> expression de boucle. Je crois que la rouille infère que
iter code> est de type
u16 code> car il est utilisé à l'intérieur de mon calcul sur la ligne 4.
error[E0277]: the type `[std::option::Option<u16>]` cannot be indexed by `u16`
--> exercises/option/option1.rs:3:9
|
7 | numbers[iter] = Some(number_to_add);
| ^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
iTer code> comme
u16 code> à l'intérieur du calcul en ligne 4, mais toujours ayant des problèmes. li>
ul>
3 Réponses :
Votre hypothèse est correcte. Et votre correctif était OK aussi (il a conduit à une erreur différente, voir ci-dessous).
Votre premier problème était que pour l'indexation des tranches, ITER doit être de type ou p> conduira à une inférence de type correcte via Rusc. p> Votre deuxième problème était que les chiffres étaient Non initialisé, Rustc vous avertit correctement lorsque vous essayez de modifier les numéros. Affectant une valeur, E.G., P> user p> de sorte que p> soit P>
let mut numbers: [Option<u16>; 5] = [None; 5];
Mis à part les réponses existantes, une approche de niveau quelque peu plus élevée pourrait également être plus propre (selon le goût) une autre alternative serait une approche plus paresseuse, mais il y a (Afaik) non façon de par exemple aussi p> try_collect code> dans un tableau, seul
try_from code> une tranche sur un tableau, vous devez donc collecter () à une VEC, puis
try_from code> à Un tableau, qui semble moins que utile. Bien que vous puissiez toujours utiliser un itérateur pour initialiser votre tableau: p>
// `iter` moves to inner scope
Votre raisonnement est correct. Juste pour ajouter, si vous souhaitez uniquement initialiser votre tableau, vous pouvez également considérer cette façon de le faire:
let arr_elem = |i: u16| Some(((i * 5) + 2) / (4 * 16)); let numbers : [Option<u16>; 5] = [ arr_elem(0), arr_elem(1), arr_elem(2), arr_elem(3), arr_elem(4), ];
J'ai essayé de casting
iter code> comme
u16 code> à l'intérieur du calcul de la ligne 4, mais recevez toujours la même erreur. i> Ce n'est pas la même erreur. Ajouter
= [Aucun; 5] code> à la déclaration de
numéros code> et il compilera.