Scala di sottolineatura - ERRORE: tipo di parametro mancante per la funzione espansa


88

So che ci sono state alcune domande su questo, ma ho creato un semplice esempio che pensavo dovesse funzionare, ma ancora non funziona e non sono sicuro di aver capito perché

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

Qualcuno può spiegare perché la seconda affermazione non viene compilata?


4
Ancora più semplice:myStrings.foreach (println)
utente sconosciuto

Risposte:


120

Si espande a:

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

Tu vuoi:

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

La sintassi segnaposto per le funzioni anonime sostituisce la più piccola espressione contenitiva possibile con una funzione.



Perché include myStrings.foreach(println(_))automaticamente toStringl'argomento a println?
Kevin Meredith

1
@Kevi Meredith println chiama toString () di qualsiasi oggetto sia passato
krookedking

1
La sintassi del segnaposto per le funzioni anonime sostituisce l'espressione contenitore più piccola possibile con una funzione. mi ha aiutato con i dubbi che ho espresso in questa domanda: stackoverflow.com/questions/37589210/…
GA1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.