92 votes

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

Je sais que plusieurs questions ont été posées à ce sujet, mais j'ai créé un exemple simple qui 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 déclaration ne compile pas ?

5 votes

Encore plus simple : myStrings.foreach (println)

125voto

retronym Points 35066

Il s'étend à :

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

Vous voulez :

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

La syntaxe de remplacement des fonctions anonymes remplace la plus petite expression contenue possible par une fonction.

1 votes

0 votes

Pourquoi est-ce que myStrings.foreach(println(_)) incluent automatiquement toString pour l'argument de println ?

1 votes

@Kevi Meredith println appelle le toString() de n'importe quel objet qui est passé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X