Подчеркивание Scala - ОШИБКА: отсутствует тип параметра для расширенной функции


88

Я знаю, что по этому поводу было довольно много вопросов, но я создал простой пример, который, как мне казалось, должен работать, но все еще не работает, и я не уверен, что понимаю, почему

val myStrings = new Array[String](3)
// do some string initialization

// this works
myStrings.foreach(println(_))


// ERROR: missing parameter type for expanded function
myStrings.foreach(println(_.toString))

Может кто-нибудь объяснить, почему второй оператор не компилируется?


4
Еще проще:myStrings.foreach (println)
user unknown

Ответы:


120

Он расширяется до:

myStrings.foreach(println(x => x.toString))

Вы хотите:

myStrings.foreach(x => println(x.toString))

Синтаксис заполнителя для анонимных функций заменяет наименьшее возможное содержащее выражение функцией.



Почему myStrings.foreach(println(_))автоматически включается toStringв качестве аргумента println?
Кевин Мередит

1
@Kevi Meredith println вызывает toString () любого переданного объекта
krookedking

1
Синтаксис заполнителем для анонимных функций заменяет наименьшее возможное , содержащее выражение с функцией. помог мне с сомнениями, которые я выразил в этом вопросе: stackoverflow.com/questions/37589210/…
GA1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.