2013-07-10 113 views
1

我有這樣的代碼並想獲得元數據變換Clojure:如何獲取內部函數的元數據?

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

例:?(元(VAR(截斷))//不起作用

像這樣的東西是可能的(元(元(VAR截斷))

UPDATE:

我把它頂函數名和解決這樣說:

(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 

回答

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特殊形式給予方便地訪問到變數:

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

#'速記符號更頻繁地使用。

相關問題