我有一个这样的方法:
def close(): Unit = {
things.foreach {
case (attr1, attr2) =>
File.<do_something>(attr1, attr2)
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种什么样的结构?我知道它正在遍历所有things地图 if <attr1, attr2>。我可以访问事物本身吗?如果我还想对thing. 我怎样才能做到这一点?
foreach是一种将函数f: A => U作为参数的方法。
@inline final override def foreach[U](f: A => U) {
var these = this
while (!these.isEmpty) {
f(these.head)
these = these.tail
}
}
Run Code Online (Sandbox Code Playgroud)
下面的例子
scala> List(1, 2, 3).foreach { elem => println(s"my elem is $elem") }
my elem is 1
my elem is 2
my elem is 3
Run Code Online (Sandbox Code Playgroud)
现在,Scala 的好处是你可以根据元素的值“模式匹配”。把它想象成if else但也有解构你的输入的能力。(阅读编程中的 patmat)
scala> List(1, "data", 3).foreach {
case elem: String => println(s"my elem is $elem")
case _ => println("something else")
}
something else
my elem is data
something else
Run Code Online (Sandbox Code Playgroud)
第二个例子是你的例子中发生了什么。您正在将每个元素模式匹配到case (attr1, attr2),这意味着每个元素都被解构为(attr1, attr2)
更多的例子,
scala> Map(1 -> "order 1", 2 -> "order 2", 3 -> "order 3").foreach {
case (key, value) => println(value)
}
order 1
order 2
order 3
scala> List((1, "order 1"), (2, "order 2"), (3, "order 3")).foreach {
case (key, value) => println(value)
}
order 1
order 2
order 3
Run Code Online (Sandbox Code Playgroud)
没有“模式匹配”,你可以简单地提供一个功能,
scala> Map(1 -> "order 1", 2 -> "order 2", 3 -> "order 3").foreach {
keyValue => println(keyValue._2)
}
order 1
order 2
order 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |