以下のループはどのようにインクリメントされていますか?
for(i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
「to」を使用した暗黙のカウンターはありますか?
for
実際には、一連のコレクションメソッドを適用するための省略形です。特に、 を使用していない場合、セレクターyield
内の各ステートメントは に変換されます。そうfor
foreach
for (i <- 1 to 3; j <- 1 to 4) f(i,j)
になる
(1 to 3).foreach{ i => (1 to 4).foreach{ j => f(i,j) } }
foreach
は、すべてのコレクションのメソッドでありRange
、1 to 3
コレクション内の各アイテムをループし、提供された関数を毎回呼び出します。ARange
の項目は、リストされた数値です (この場合、エンドポイントが含まれます)。実際にRange
は、実際には数値を別のリストに格納するわけではないため、主な目的は、正確にこの種の反復のために数値の範囲を正確に保持することです。 .
scala では、for
コンストラクトは Java の「foreach」コンストラクトに似ています。次のセットi
は、指定された Iterable 内の連続する各アイテムになります。
scala> for(i <- Seq(1, 2, 3)) println(i)
1
2
3
to
演算子は、次のように 1 から 3 までを構築します1 to 3
。Range
scala> 1 to 3
res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
Int から RichInt への暗黙的な変換があります。
RichInt は、Range を返す関数 to() を定義します。
Range はコレクションであり、 foreach() を持っているため、 for 内包表記で使用できます (これは foreach() の構文糖衣にすぎません)。