В чем разница между foreach (println) и foreach (println ())? - PullRequest
1 голос
/ 03 октября 2019

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

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 ]

7 голосов
/ 03 октября 2019

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

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

Они не одинаковы.

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

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

1 голос
/ 03 октября 2019

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

str.foreach(println(_))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...