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?


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.



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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.