В чем разница между 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(_))