Podkreślenie skali - BŁĄD: brak typu parametru dla funkcji rozszerzonej

88

Wiem, że było sporo pytań na ten temat, ale stworzyłem prosty przykład, który moim zdaniem powinien działać, ale nadal nie działa i nie jestem pewien, czy rozumiem dlaczego

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))

Czy ktoś może wyjaśnić, dlaczego druga instrukcja się nie kompiluje?

Jeff Storey
źródło
4
Jeszcze prostsze:myStrings.foreach (println)
użytkownik nieznany

Odpowiedzi:

120

Rozszerza się do:

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

Chcesz:

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

Składnia symbolu zastępczego dla funkcji anonimowych zastępuje najmniejsze możliwe wyrażenie zawierające funkcję.

retronim
źródło
Dlaczego myStrings.foreach(println(_))automatycznie włącza toStringargument do println?
Kevin Meredith,
1
@Kevi Meredith println wywołuje metodę toString () dowolnego przekazanego obiektu
krookedking
1
Składnia zastępczy dla funkcji anonimowych zastępuje najmniejszą możliwą zawierający wyrażenie z funkcji. pomogło mi z wątpliwościami, które wyraziłem w tym pytaniu: stackoverflow.com/questions/37589210/…
GA1