ドキュメントはその方法を述べておらず、チュートリアルはforループを完全に無視します。
1.0以降、forループは Iterator
trait を使用して型の値を処理します。
本はこのテクニックを .5章 と 13.2章 で説明しています。
Forループの動作に興味がある場合は、ここで説明されている構文糖を参照してください。
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);
}
実際、チュートリアルの Loops セクションはfor
ループをカバーしています:
ベクトルを反復する場合は、代わりに
for
を使用してください。for elt in ["red", "green", "blue"] { std::io::println(elt); }
ただし、インデックスが必要な場合は、 uint::range
コアライブラリの関数 (またはint::range
またはu8::range
またはu32::range
またはu64::range
)およびRustのブロックの構文:
range(0u, 64u, {|i| C[i] = A[i] + B[i]});
Rustはこの同等の構文をサポートするために使用されていましたが、後で削除されました。
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
for i in range(0, 100)
は、_for i in 0..100
_(_rustc 1.0.0-nightly
_に準拠)のために廃止されました。
また、注目に値するのは、範囲内の識別子(_for i in 0..a
_など)を使用してもコンパイラーが曖昧さを解消できないため、for i in (0..a)
を使用する必要があるためです pull request =これを修正するために送信されました。
Rustc 0.4(2012年10月)以降、
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
サポートされなくなったようです。
int :: range を使用します。