가 원래 다음과 같은 질문에 의해 동기 : Mapped calls to clojurescript macro매크로없이 Clojure`defn` 함수를 자동 생성하는 방법은 무엇입니까?
가 자동으로 많은 유사한 기능을 만들려는 가정 (즉없이 그들 모두를 손으로 작성). 우리는 몇 가지 기존 기능이 있다고 가정하고 우리는 어떤 종류의 콜백 핸들러로 포장합니다 : 결과
(defn do-foo [] (println "I foo'ed"))
(defn do-bar [] (println "I bar'ed"))
(defn do-baz [] (println "I baz'ed"))
(defn manual-on-foo [] (do-foo))
(defn manual-on-bar [] (do-bar))
(defn manual-on-baz [] (do-baz))
(println "Calling manual-on-* functions")
(manual-on-foo)
(manual-on-bar)
(manual-on-baz)
:
Calling manual-on-* functions
I foo'ed
I bar'ed
I baz'ed
우리는 래퍼 함수를 생성 할 자동이 아닌 수동으로 .
이 기능을 만들려면 매크로가 필요하다고 생각할 수도 있습니다. 그 해결책 중 하나입니다. 그러나 매크로의 약점은 다른 함수에 인수로 전달할 수 없다는 것입니다 (예 : map
). 따라서, 우리는 같은 매크로를 작성할 수
(generate-fn :foo) ;=> creates `on-foo` w/o hand-writing it
을하지만, 다음은 실패 :
(map generate-fn [:foo :bar :baz])
우리가 어떻게 이러한 기능의 생성을 자동화 할 수 있습니다? 매크로와 map
을 사용할 수는 없지만