ドキュメントには方法が記載されておらず、チュートリアルでは for ループが完全に無視されています。
6 に答える
1.0 の時点で、forループはIterator
traitを持つ型の値で機能します。
この本では、この手法について3.5章と13.2章で説明しています。
forループがどのように動作するかに興味がある場合は、モジュール std::iterで説明されている構文糖衣を参照してください。
例:
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
は type&&'static str
があることを意味するので、 として逆参照し*sptr
ます。私が好む別の形式は次のとおりです。for &s in strs.iter() { println!("{}", s); }
実際、チュートリアルのループ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)
、 を使用する必要がありますが、これを修正するためにプル リクエストが送信されています。
rustc 0.4(2012年10月)の時点で、
range(0u, 64u) {|i|
C[i] = A[i] + B[i];
}
もうサポートされていないようです。
int::rangeを使用します。