destrucutred 인수를 사용하여 매크로를 작성하는 데 문제가 있습니다. 다음은 예입니다 : 여기매크로를 통해 destructured args 전달
(defmacro defny
[n args & forms]
`(defn ~n ~args [email protected]))
(defmacro defnz
[n f args & forms]
`(defn ~n ~args
(do
(~f [email protected])
[email protected])))
(defny y
[{:keys [value] :as args}]
(println "Y ARGS" args)
(println "Y VALUE" value))
(defnz z y
[{:keys [value] :as args}]
(println "Z ARGS" args)
(println "Z VALUE" value))
, 나는 같은 작업을 수행하는 두 매크로, 단순히 defn이하기를 통해 호출 defny 및 defnz을 가지고 있지만 추가 defnz의 인수와 함께 이전에 함수 본문에 호출 다른 기능을 수용 . 내가 z를 호출 할 때
, 나는 두 값과 같은 인쇄 인수를 볼 것으로 예상, 대신 내가 얻을 : 키 [1 : 왜 이런 일
(z {:value 1})
Y ARGS {:keys [1], :as {:value 1}}
Y VALUE nil
Z ARGS {:value 1}
Z VALUE 1
=> nil
내가의 탈구 인수를 {볼 수 있습니다 ] : as {: value 1}}가 y로 전달되고 있지만 defnz 매크로를 수정하여 구조화 된 args를 제대로 전달할 수 있는지 모르겠습니다.
이 매크로를 생산하는 어떤 코드를보고'macroexpand'와'macroexpand-1 '을보십시오. –