당신의 data
VAR이 매크로 호출하기 전에 네임 스페이스에 정의되어있는 경우, 당신이 그것을 해결하기 위해 기능을 조작하는 몇 가지 네임 스페이스를 사용할 수있는 이름으로 값이다 :
(defmacro pair-defs [data]
`(do [email protected](for [[k v] @(ns-resolve *ns* data)]
`(def ~k ~v))))
user> (def data [['a 10] ['b 20]])
#'user/data
user> (pair-defs data)
#'user/b
나에 의해 문자 데이터와 데이터를 모두 처리 할 수 VAR 이름 : 호출이 원하는 형태로 확장
(defmacro pair-defs [data]
(let [dt (if (symbol? data) @(ns-resolve *ns* data) data)]
`(do [email protected](for [[k v] dt]
`(def ~k ~v)))))
: (do (def a 10) (def b 20))
따라서 eval
과 같은 더러운 트릭없이 네임 스페이스 val을 해결하는 것은 완전히 가능하지만 매크로의 불필요한 사용법입니다. 예를 들어 작업은 일반 함수 호출로 쉽게 대체 할 수 있습니다.
(defn pair-defs1 [data]
(doseq [[k v] data]
(intern *ns* k v)))
은 어떤
data
순서 작업은 로컬 또는 글로벌, 문자 또는
생성 될