2

以下のループはどのようにインクリメントされていますか?

for(i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")

「to」を使用した暗黙のカウンターはありますか?

4

3 に答える 3

9

for実際には、一連のコレクションメソッドを適用するための省略形です。特に、 を使用していない場合、セレクターyield内の各ステートメントは に変換されます。そうforforeach

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は、すべてのコレクションのメソッドでありRange1 to 3コレクション内の各アイテムをループし、提供された関数を毎回呼び出します。ARangeの項目は、リストされた数値です (この場合、エンドポイントが含まれます)。実際にRangeは、実際には数値を別のリストに格納するわけではないため、主な目的は、正確にこの種の反復のために数値の範囲を正確に保持することです。 .

于 2012-08-14T21:16:51.630 に答える
2

scala では、forコンストラクトは Java の「foreach」コンストラクトに似ています。次のセットiは、指定された Iterable 内の連続する各アイテムになります。

scala> for(i <- Seq(1, 2, 3)) println(i)
1
2
3

to演算子は、次のように 1 から 3 までを構築します1 to 3Range

scala> 1 to 3
res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
于 2012-08-14T21:07:44.737 に答える
2

Int から RichInt への暗黙的な変換があります。

RichInt は、Range を返す関数 to() を定義します。

Range はコレクションであり、 foreach() を持っているため、 for 内包表記で使用できます (これは foreach() の構文糖衣にすぎません)。

于 2012-08-14T21:17:23.003 に答える