我有这样的方法:
def close(): Unit = {
things.foreach {
case (attr1, attr2) =>
File.<do_something>(attr1, attr2)
}
}
这是什么结构?我知道它正在迭代所有things
,这是<attr1, attr2>
的地图。我可以访问这个东西吗?
如果我还想在thing
的类/类型上进行模式匹配,该怎么办?我怎么能这样做?
答案 0 :(得分:1)
这是一个匿名函数,它对things
中的每个元素都有两个参数。
如果things
是Map[A, B]
,它会将File.<do_something>
应用于地图中每对的键和值,假设为<do_something>
&#39; s第一个参数的类型为A
,第二个参数的类型为B
。
答案 1 :(得分:1)
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
}
}
以下示例
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
现在,关于scala的好处是你可以在元素上进行模式匹配。 (阅读scala中的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
第二个例子是你的例子中发生了什么。您可以将每个元素与case (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
如果没有模式匹配,你也可以这样做,
scala> Map(1 -> "order 1", 2 -> "order 2", 3 -> "order 3").foreach {
keyValue => println(keyValue._2)
}
order 1
order 2
order 3