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?

Jeff Storey
quelle
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.

Retronym
quelle
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