Как мне динамически найти метаданные для функции Clojure?

Скажем, у меня есть следующий код:

(defn ^{:graph-title "Function 1"} func-1
  [x]
  (do-something-with x))

(defn get-graph-title 
  [func]
  (str
    ((meta func) :graph-title))) 

Я ожидаю, что это вернет «Функция 1», но он вернет ноль. Я думаю, это связано со следующей разницей, которую я не совсем понимаю:

(meta func-1)
=>  {:ns some-ns-info, :name func-1}
(meta #'func-1)
=>  {:ns some-ns-info, :name func-1, :graph-title "Function 1"}

Может ли кто-нибудь мне это объяснить?

17
задан Daniel Hedberg 8 February 2013 в 16:30
поделиться