2017-09-21 2 views
2

전달 된 인수를 매크로에 구문 쿼터를 달기를 원하지만 주위를 둘러 볼 수 없습니다. 그래서 quote-it< 매크로를 주어, 나는구문 - 매크로 인수를 인용 하시겠습니까?

(quote-it <) 
=> clojure.core/< 

의 어느 작품을 좀하고 싶습니다 다음

(defmacro quote-it [a] `~a) 
=> #'user/quote-it 
(quote-it <) 
=> #object[clojure.core$_LT_ 0x11c08900 "[email protected]"] 

(defmacro quote-it [a] `'~a) 
=> #'user/quote-it 
(quote-it <) 
=> < 

답변

2

당신은 clojure.core/resolve를 사용하여 현재 네임 스페이스에 var에에 기호를 해결할 수 있습니다 기능. var 객체는 원래 심볼의 네임 스페이스와 이름을 포함합니다. 그런 다음이 값을 사용하여 새 심볼을 생성하고이를 반환 할 수 있습니다.

(defmacro quote-it [a] 
    (let [r (resolve a)] 
    `'~(symbol (str (:ns (meta r))) (str (:name (meta r))))))