Можно ли получить название частично примененной функции? - PullRequest
0 голосов
/ 21 марта 2011

Предположим, я определил функцию:

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

Тогда я определил частичную функцию:

def p = hello _

Печать p, отображается:

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

Имя функции не отображается. Можно ли получить исходное имя метода hello из частичной функции p?

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Недавно в списках рассылки было некоторое обсуждение языковой конструкции, которая позволяет вам идентифицировать текущий метод , в котором вы находитесь. Он будет называться как thisMethod и, по сути, будет делать для методов то, что this делает для экземпляров классов.

Мне было бы интересно посмотреть, как это взаимодействует с функциями (которые отличаются от методов). Ваша p - это анонимная функция, созданная путем частичного применения метода hello (опять же, здесь вы должны быть осторожны, «частично примененная функция сильно отличается от PartialFunction). Фактически вызванный метод будет apply для этого функционального объекта, и есть несколько возможностей относительно того, как thisMethod может вести себя в таком случае.

Что бы ни случилось, p - это просто ссылка на объект, не ожидайте, что когда-либо сможет получить к нему доступ как к имени.

3 голосов
/ 21 марта 2011

номер

Эту функцию я бы хотел иметь, но у нее есть серьезные концептуальные проблемы, такие как, что должно произойти, когда одна и та же функция получает два имени ... она должна быть той же самой функцией, не так ли?

обновление в ответ на комментарий:

def p = привет _ def q = p

Как называется q? п? или привет? или распечатать? Мне трудно представить простое, последовательное и полезное решение.

2 голосов
/ 21 марта 2011

... на самом деле это «частично примененная функция», которая создается анонимно путем вызова вашей функции приветствия без применения параметров. У него нет явного имени для показа.

...