Scala underscore - ERROR: type de paramètre manquant pour la fonction étendue

87

Je sais qu'il y a eu pas mal de questions à ce sujet, mais j'ai créé un exemple simple qui, selon moi, devrait fonctionner, mais qui ne fonctionne toujours pas et je ne suis pas sûr de comprendre pourquoi

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

Quelqu'un peut-il expliquer pourquoi la deuxième instruction ne se compile pas?

Jeff Storey
la source
4
Encore plus simple:myStrings.foreach (println)
utilisateur inconnu

Réponses:

118

Il s'étend à:

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

Tu veux:

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

La syntaxe d'espace réservé pour les fonctions anonymes remplace la plus petite expression contenant possible par une fonction.

rétronyme
la source
Pourquoi myStrings.foreach(println(_))inclut automatiquement toStringpour l'argument à println?
Kevin Meredith
1
@Kevi Meredith println appelle le toString () de n'importe quel objet passé
krookedking
1
La syntaxe de l'espace réservé pour les fonctions anonymes remplace la plus petite expression contenant possible par une fonction. m'a aidé avec les doutes que j'ai exprimés dans cette question: stackoverflow.com/questions/37589210/…
GA1