В чем разница между foreach (println) и foreach (println ())?

У меня есть строковый массив:

val str:Array[String] = Array("aa","bb")
scala> str.foreach(println) // works
aa
bb
scala> str.foreach(println()) // println() also returns a Unit, doesn't it?
                          ^
error: type mismatch;
found   : Unit
required: String => ?

Почему str.foreach(println) работать без проблем, но str.foreach(println())нет?
Неprintln эквивалентно println() который возвращает Unit ценность?

2 ответа

Решение

println - это метод (конвертируемый в функцию), который принимает входные данные (String в данном случае) и дает результат (Unit) и побочный эффект (печать в StdOut).

println() - это вызов метода, который не принимает никаких входных данных, дает результат (Unit) и побочный эффект (\n в StdOut).

Они не такие.

Второй не будет работать в foreach() потому как foreach() передает элементы (в данном случае строки) своему аргументу и println() не примет вход, который foreach() кормит его.

Это будет работать str.foreach(_ => println()) потому что стрелка подчеркивания (_ =>) говорит: "Игнорируйте ввод. Просто выбросьте его и вызовите то, что следует".

Причина в том, что вам не хватает подчеркивания. Попробуй это

str.foreach(println(_))
Другие вопросы по тегам