0
votes

Appeler une fonction anonyme à l'intérieur d'une méthode de carte

Je faisais un constructeur avec plusieurs arguments possibles, lorsque j'ai réalisé que mon IDE indiquait une divergence de type: xxx pré>

donc j'ai essayé de passer le col em> fonction. p> xxx pré>

Ça fonctionne, puis, essayant de comprendre pourquoi, j'ai fini par: p> xxx pré>

donc donc je découvert que le passage d'une fonction anonyme aux méthodes telles que carte forte> ne renvoie pas le résultat, mais plutôt toute la fonction (car elle est traitée comme un objet que je suppose). P>

alors comment Est-ce que je fais ce travail fort> pour obtenir une colonne plutôt que le type de fonction, sans le déclarer séparément? p>

  def this(path: String, column: String) {
    this(path, column.split(",").map(_ => {
      col(_)
    }))
  }


3 Réponses :


0
votes

Ce que vous faites passe à la carte Une fonction anonyme renvoie une autre fonction avec type String => Colonne. Vous devez supprimer l'espace réservé _ de la partie gauche de votre fonction littérale ou utilisez un nom d'argument explicite.


0 commentaires

4
votes

La réponse simple est que vous remplacez xxx

avec xxx

le problème est que vous traitez _ est un identifiant de variable normal, mais ce n'est pas le cas. Les deux utilisations de _ dans la première expression sont complètement indépendantes.

Le premier _ est un espace réservé pour l'argument à une fonction anonyme. La syntaxe _ => ... signifie que vous définissez une fonction mais n'utiliserez pas l'argument sur cette fonction lors du calcul du résultat.

Le second _ < / Code> est un espace réservé pour l'argument sur col . La syntaxe col (_) tourne la méthode col dans une fonction libre.


1 commentaires

Ah, mon problème est venu de ne pas comprendre correctement ce que _ faisait ici ... Je laisserai ma question et le lien en double juste au cas où une personne tombe dans le même problème, afin qu'ils puissent être signalés dans la bonne direction. Acclamations!



1
votes

Les deux souligneurs dans

.map(col)


0 commentaires