Array("hi","there").map(println)
Array("hi","there").map(s => println(s))
Array("hi","there").map(println(_))
Каждый из приведенных выше утверждений дает тот же результат, хотя в первых 2 аргумента к карте является функцией объекта, тогда как в последнем оно вызовы функций.Scala: аргумент для отображения является функцией ИЛИ вызов функции
0 Как есть Карта подходит для обработки как?
Подпись карты в TraversableLike класса, как это:
def map[B, That](f: scala.Function1[A, B])(implicit bf: scala.collection.generic.CanBuildFrom[Repr, B, That]) : That = { /* compiled code */ }
Я бы только добавить, что и первый и третий случай, трансформируются в 2 одной, а различные механизмы; первый из них - это расширение, как объяснил Юваль, а третий - простое сглаживание компилятора ('println (_)' и 's => println (s)' буквально одно и то же, прежнее - короткая форма последнего). Компилятор не сможет сопоставить первый пример с определением карты без eta-расширения, так как тип 'def foo = println' является' Unit', а не '(String) => Unit'. С другой стороны, 'def foo = println (_)' имеет тип '(String) => Unit' и, следовательно, 2-й и 3-й готовые к работе. – slouc
@slouc Добавлено в ответ! –