foreach循环在scala中

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

val a = List("a","b","c","d")

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

a.foreach(c => println(c))

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

val v = Vector((1,9), (2,8), (3,7), (4,6), (5,5))

为什么我必须使用

v.foreach{ case(i,j) => println(i, j) }
  • 模式匹配的情况
  • {括号
  • 请解释执行两个foreach循环时会发生什么。


    你不必,你选择。 问题是当前的Scala编译器不解构元组,你可以这样做:

    v.foreach(tup => println(tup._1, tup._2))
    

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

    这就是编译器在使用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))
      }))
    }
    

    您会发现它与未命名的x0$1匹配,并分别将_1_2放入ij


    回答2:你只能使用case在括号中。 关于大括号的更完整的答案位于这里。


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

    val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")
    
    for (name <- names)
        println(name)
    
    链接地址: http://www.djcxy.com/p/72829.html

    上一篇: foreach loop in scala

    下一篇: What types are special to the Scala compiler?