[英]foreach loop in 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
分别放在i
和j
。
根据http://alvinalexander.com/scala/iterating-scala-lists-foreach-for-comprehension :
val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")
for (name <- names)
println(name)
回答#2:你只能在大括号中使用case
。 关于牙箍的更完整答案就在这里 。
Vector的工作方式有点不同,你使用case使用函数文字...
在Scala中,我们使用括号{}
来接受case
......
{
case pattern1 => "xxx"
case pattern2 => "yyy"
}
所以,在这种情况下,我们将它与foreach循环一起使用......
使用以下模式打印所有值:
val nums = Vector((1,9), (2,8), (3,7), (4,6), (5,5))
nums.foreach {
case(key, value) => println(s"key: $key, value: $value")
}
你也可以检查其他循环,比如for循环,如果你认为这不是你觉得舒服的东西......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.