2013-07-10 6 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

Clojure에서 arglists에이 유형의 메타 데이터를 첨부하는 것은 특별한 의미가 없습니다. (타입 힌트는 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/+ 

#' 약식 표기는 훨씬 더 자주 사용된다.

관련 문제