Question

Supposons que j'ai défini une fonction:

def hello(name:String, words:String) = println("Hello!" + name + words)

Ensuite, j'ai défini une fonction partielle:

def p = hello _

Imprimer P, affiché:

(String, String) => Unit = <function2>

Il n'y a aucun nom de fonction affiché. Est-il possible d'obtenir le nom de la méthode d'origine hello de la fonction partielle p?

Était-ce utile?

La solution

a J'ai été une discussion sur les listes de diffusion récemment sur une construction linguistique qui vous permet d'identifier le courant méthode dans lequel vous êtes. Cela s'appellerait quelque chose comme thisMethod et ferait essentiellement pour les méthodes quoi this fait pour les instances de classe.

Je serais intéressé de voir comment cela interagit avec les fonctions (qui sont un concept différent des méthodes). Ton p est une fonction anonyme créée en appliquant partiellement le hello Méthode (encore une fois, vous devez être prudent ici, "partiellement appliqué La fonction est une chose très différente d'un PartialFunction). La méthode réelle alors invoquée serait apply sur cet objet de fonction, et il y a plusieurs possibilités sur la façon dont thisMethod pourrait se comporter dans un tel cas.

Quoiqu'il arrive, p est juste une référence d'objet, ne vous attendez pas à déjà pouvoir y accéder sous forme de nom.

Autres conseils

Non.

C'est une fonctionnalité que j'adorerais avoir, mais elle a de sérieux problèmes conceptuels comme, que devrait-il arriver, lorsque la même fonction reçoit deux noms ... il devrait toujours être la même fonction, n'est-ce pas?

Mise à jour en réponse au commentaire:

def p = bonjour _ def q = p

Quel est le nom de Q? P? ou bonjour? ou println? J'ai du mal à imaginer une solution simple, cohérente et utile.

... C'est en fait une "fonction partiellement appliquée" qui est créée de manière anonyme en appelant votre fonction Hello sans les paramètres appliqués. Il n'a pas de nom explicite à montrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top