Начиная с 1.0, для циклов работают со значениями типов с признаком Iterator
.
Книга описывает эту технику в главе 3.5 и глава 13.2 .
Если вам интересно, как работают циклы, см. описанный синтаксический сахар здесь:
http://doc.rust -lang.org / std / iter/index.html
Пример:
fn main() {
let strs = ["red", "green", "blue"];
for sptr in strs.iter() {
println!("{}", sptr);
}
}
( Детская площадка )
Если вы просто хотите перебирать диапазон чиселКак и в циклах C for
, вы можете создать числовой диапазон с синтаксисом a..b
:
for i in 0..3 {
println!("{}", i);
}
Если вам нужны и индекс, и элемент из массива, идиоматический способ получитьто есть с помощью метода Iterator::enumerate
:
fn main() {
let strs = ["red", "green", "blue"];
for (i, s) in strs.iter().enumerate() {
println!("String #{} is {}", i, s);
}
}
Примечания:
Элементы цикла являются заимствованными ссылками на элементы iteratee.В этом случае элементы strs
имеют тип &'static str
- они заимствованы указатели на статические строки.Это означает, что sptr
имеет тип &&'static str
, поэтому мы разыменовываем его как *sptr
.Альтернативная форма, которую я предпочитаю:
for &s in strs.iter() {
println!("{}", s);
}