Clojure: полное имя функции - PullRequest
       0

Clojure: полное имя функции

5 голосов
/ 21 сентября 2010

В Clojure есть более элегантный способ найти полное имя функции (известной метаинформацией), чем

(defn fully-qualified-name [fn]
  (let [fn-meta (meta fn )
        fn-ns (ns-name (:ns fn-meta))
        ]
    (str fn-ns "/" (:name fn-meta))))

Требуется решение во время выполнения.Решения для чтения и компиляции приветствуются.

Ответы [ 4 ]

10 голосов
/ 21 сентября 2010

(resolve 'foo) возвращает переменную с именем "foo" и ее полное имя.

2 голосов
/ 05 марта 2014

type дает полное имя, независимо от метаинформации.

2 голосов
/ 21 сентября 2010

как насчет синтаксического цитирования? это делает авто-квалификацию. используйте `вместо '

user=> `(inc)
(clojure.core/inc)
user=> `(fn)
(clojure.core/fn)
1 голос
/ 21 сентября 2010

Вывод .toString может помочь вам начать:

user=> (.toString map)
"clojure.core$map@11af7bb"
...