2

下面的循环如何递增?

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

是否有使用 'to' 的隐式计数器?

4

3 回答 3

9

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并没有将数字存储在单独的列表中,因此它的主要目的正是为这种迭代保存数字范围.

于 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 to 3构造Range从 1 到 3的a:

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 回答