Scala-Unterstrich - FEHLER: Fehlender Parametertyp für erweiterte Funktion


87

Ich weiß, dass es einige Fragen dazu gab, aber ich habe ein einfaches Beispiel erstellt, von dem ich dachte, dass es funktionieren sollte, aber es funktioniert immer noch nicht und ich bin mir nicht sicher, warum ich das verstehe

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

Kann jemand erklären, warum die zweite Anweisung nicht kompiliert wird?


4
Noch einfacher:myStrings.foreach (println)
Benutzer unbekannt

Antworten:


118

Es erweitert sich zu:

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

Sie wollen:

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

Die Platzhaltersyntax für anonyme Funktionen ersetzt den kleinstmöglichen Ausdruck mit einer Funktion.



Warum schließt das Argument myStrings.foreach(println(_))automatisch ein ? toStringprintln
Kevin Meredith

1
@ Kevin Meredith println ruft den toString () des übergebenen Objekts auf
krookedking

1
Die Platzhaltersyntax für anonyme Funktionen ersetzt den kleinstmöglichen Ausdruck durch eine Funktion. half mir mit den Zweifeln, die ich in dieser Frage geäußert habe: stackoverflow.com/questions/37589210/…
GA1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.