Est-il possible d'obtenir le nom d'une fonction partiellement appliquée?
-
28-10-2019 - |
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
?
La solution
Là 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.