下面的循环如何递增?
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 to 3
构造Range
从 1 到 3的a:
scala> 1 to 3
res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
存在从 Int 到 RichInt 的隐式转换。
RichInt 定义了返回 Range 的函数 to()。
Range 是一个集合,并且具有 foreach(),因此它可以用于 for 理解(这只是 foreach() 的语法糖)。