1

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

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

例如:(meta(var(truncate))//不起作用

这样的事情可能吗?(元 (元 (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
4

1 回答 1

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/+

速记符号的#'使用频率更高。

于 2013-07-10T02:30:24.390 回答