:Mapped calls to clojurescript macroClojure `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
私たちは、ラッパー関数を生成する自動の代わりに、手動で。
この機能を作成するにはマクロが必要だと思うかもしれませんが、それが1つの解決策です。しかし、マクロの弱点は、引数として他の関数、例えばmap
に渡すことができないことです。したがって、我々は次のようなマクロを書くことができます:
(generate-fn :foo) ;=> creates `on-foo` w/o hand-writing it
が、次は失敗します:
(map generate-fn [:foo :bar :baz])
どのように我々は、これらの機能の生成を自動化することができますか?