最近我接受了 Scala 开发人员职位的面试。我被问到这样的问题
// matrix 100x100 (content unimportant)
val matrix = Seq.tabulate(100, 100) { case (x, y) => x + y }
// A
for {
row <- matrix
elem <- row
} print(elem)
// B
val func = print _
for {
row <- matrix
elem <- row
} func(elem)
问题是:A 或 B 哪个实现更有效?
我们都知道for 推导式可以翻译成
// A
matrix.foreach(row => row.foreach(elem => print(elem)))
// B
matrix.foreach(row => row.foreach(func))
B 可以写成matrix.foreach(row => row.foreach(print _))
假设正确答案是 B,因为 A 将创建print
100 倍的函数。
我检查了语言规范,但仍然无法理解答案。有人可以向我解释一下吗?