scala中的foreach循环

Sri*_*vas 9 foreach scala

在scala foreach循环中,如果我有列表

val a = List("a","b","c","d")
Run Code Online (Sandbox Code Playgroud)

我可以打印它们没有像这样的模式匹配

a.foreach(c => println(c))
Run Code Online (Sandbox Code Playgroud)

但是,如果我有这样的元组

val v = Vector((1,9), (2,8), (3,7), (4,6), (5,5))
Run Code Online (Sandbox Code Playgroud)

我为什么要使用

v.foreach{ case(i,j) => println(i, j) }
Run Code Online (Sandbox Code Playgroud)
  1. 模式匹配案例
  2. {括号

请解释执行两个foreach循环时会发生什么.

Yuv*_*kov 8

您没有,您选择.问题是当前的Scala编译器没有解构元组,你可以这样做:

v.foreach(tup => println(tup._1, tup._2))
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望能够使用新的变量名称引用它自己的每个元素,则必须使用具有模式匹配的部分函数,​​这可以解构元组.

这就是编译器在您使用时case所执行的操作:

def main(args: Array[String]): Unit = {
  val v: List[(Int, Int)] = scala.collection.immutable.List.apply[(Int, Int)](scala.Tuple2.apply[Int, Int](1, 2), scala.Tuple2.apply[Int, Int](2, 3));
  v.foreach[Unit](((x0$1: (Int, Int)) => x0$1 match {
    case (_1: Int, _2: Int)(Int, Int)((i @ _), (j @ _)) => scala.Predef.println(scala.Tuple2.apply[Int, Int](i, j))
  }))
}
Run Code Online (Sandbox Code Playgroud)

你会看到它模式匹配未命名x0$1,put _1_2内部ij.


grn*_*rnc 5

根据http://alvinalexander.com/scala/iterating-scala-lists-foreach-for-comprehension

val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")

for (name <- names)
    println(name)
Run Code Online (Sandbox Code Playgroud)