我有这段代码,想要获得元数据转换
(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
答案 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/+
更频繁地使用#'
简写表示法。