更多的迭代方式:
scala> xs.foreach (println)
first
second
third
foreach等类似函数,以及map函数会返回某些东西(函数的结果,对于println函数来说是Unit类型,因此返回一个Unit列表)。
scala> val lens = for (x <- xs) yield (x.length)
lens: Array[Int] = Array(5, 6, 5)
与其使用索引,不如直接使用元素。
scala> ("" /: xs) (_ + _)
res21: java.lang.String = firstsecondthird
折叠
for(int i=0, j=0
can be done with recursion:
def ijIter (i: Int = 0, j: Int = 0, carry: Int = 0) : Int =
if (i + j >= 100) carry else
ijIter (i+2*j, j+i+2, carry / 3 + 2 * i - 4 * j + 10)
carry-part只是一些示例,用于处理i和j。它不必是Int。
对于更简单的东西,更接近于通常的for循环:
scala> (1 until 4)
res43: scala.collection.immutable.Range with scala.collection.immutable.Range.ByOne = Range(1, 2, 3)
scala> (0 to 8 by 2)
res44: scala.collection.immutable.Range = Range(0, 2, 4, 6, 8)
scala> (26 to 13 by -3)
res45: scala.collection.immutable.Range = Range(26, 23, 20, 17, 14)
或者无序的:
List (1, 3, 2, 5, 9, 7).foreach (print)
while
循环。据我回忆,几年前曾经有一个争论,是否应该让Scala继承Java的for(;;)
循环,而当时决定不采用这种方式是因为其增加的复杂性没有带来足够的好处。 - Kipton Barros