Les docs ne disent pas comment, et le tutoriel ignore complètement pour les boucles.
À partir de 1.0, pour les boucles fonctionnent avec des valeurs de types avec le Iterator
trait .
Le livre décrit cette technique dans chapitre 3.5 et chapitre 13.2 .
Si vous êtes intéressé par la manière des boucles, consultez le sucre syntaxique décrit ici:
http://doc.rust-lang.org/std/iter/index.html
Exemple:
fn main() {
let strs = ["red", "green", "blue"];
for sptr in strs.iter() {
println!("{}", sptr);
}
}
(- terrain de je )
Si vous souhaitez simplement itération sur une gamme de chiffres, comme dans les boucles for
, vous pouvez créer une plage numérique avec le a..b
Syntaxe:
for i in 0..3 {
println!("{}", i);
}
Si vous avez besoin à la fois, l'index et l'élément d'un tableau, le moyen idiomatique de l'obtenir avec le Iterator::enumerate
Méthode:
fn main() {
let strs = ["red", "green", "blue"];
for (i, s) in strs.iter().enumerate() {
println!("String #{} is {}", i, s);
}
}
Remarques:
Les éléments de boucle sont empruntés des références aux éléments iTRETE. Dans ce cas, les éléments de strs
ont le type &'static str
- Ils sont empruntés sur des cordes statiques. Cela signifie sptr
a type &&'static str
donc nous la déréférences comme *sptr
. Une forme alternative que je préfère est:
for &s in strs.iter() {
println!("{}", s);
}
En fait, la section boucles du tutoriel couvre for
boucles:
Lorsque vous itérant sur un vecteur, utilisez
for
à la place.for elt in ["red", "green", "blue"] { std::io::println(elt); }
Mais si vous aviez besoin de indices, vous pouvez faire quelque chose comme ce qui suit, en utilisant le uint::range
fonction de la bibliothèque principale (ou int::range
ou u8::range
ou u32::range
ou u64::range
) et la syntaxe de rouille pour les blocs:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
La rouille utilisée pour prendre en charge cette syntaxe équivalente, mais il a été supprimé par la suite:
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
for i in range(0, 100)
est maintenant obsolète en faveur de for i in 0..100
(selon rustc 1.0.0-nightly
.
Vaut également la peine d'être noté, le compilateur ne peut pas être désambigué lorsque vous utilisez un identifiant dans la plage (par exemple, for i in 0..a
) Vous devez donc utiliser for i in (0..a)
, mais il y a ne demande de traction Soumis pour résoudre ce problème.
Notez qu'à partir de Rusc 0,4 (oct. 2012), la construction alternative de
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
semble ne pas être pris en charge.
Utilisez int :: plage .