Недавно у меня было интервью для позиции Scala Developer. Меня задали такой вопрос
// 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, более эффективна?
Мы все знаем, что для понимания можно перевести на
// 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 раз больше.
Я проверил Спецификацию языка, но все еще не понимаю ответа. Может ли кто-нибудь объяснить это мне?