Clojure:如何获取内部函数的元数据?

时间:2013-07-10 02:18:50

标签: clojure

我有这段代码,想要获得元数据转换

(defn truncate
  [& {:keys [len]}]
  (fn ^:transform [value]
    (clojure.string/join (take len value))))

Ex :( meta(var(truncate))//没有工作

这样的事情有可能吗? (meta(meta(var truncate))

更新:

我把它移到了函数名称的顶部并以这种方式解决了它:

(defn- func-meta [func]
  (let [[name-space func-name _] (clojure.string/split (str func) #"\$")]
    (meta (ns-resolve (symbol name-space) (symbol func-name)))))

(func-meta (transform/truncate)) ;=> metadata

1 个答案:

答案 0 :(得分:2)

将这种类型的元数据附加到arglists在Clojure中没有特别的意义。 (类型提示可以附加到arglists,但这是另一回事。)但是,您可以使用以下任一方法将元数据附加到函数本身:

(defn foo []
  ^:foo (fn [] 1))

(defn foo []
  (with-meta (fn [] 1) {:foo 1}))

;; in either case:
(meta (foo))
;= {:foo true}

此外,var特殊表单可以方便地访问Vars:

(var +)
;= #'clojure.core/+

更频繁地使用#'简写表示法。