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?


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ę.



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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.