私はそれを行う関数への呼び出しをリダイレクトするマクロを書こうとしています。公開されたすべての関数を最上位のcljファイルに集める方法です。 https://martinfowler.com/bliki/PublishedInterface.htmlコピー:arglists in clojure def
私はdoc文字列とarglistsをコピーしたいですが、docstringはうまく動作しますが、argsリストはコピーされません。私は何が欠けていますか?
(defmacro idef
[fname]
(let [sym (symbol (str "clojure.core/" fname))
metas (meta (find-var sym))
arglists (:arglists metas)
doc (:doc metas)]
;;`(def ~(with-meta fname {:doc doc :arglists arglists}))
`(def ~(with-meta fname {:doc doc})
~sym)))
(idef inc)
私が代わりにコメント行を使用している場合、私は、これは名前空間はClojureのコアにハードコードされただけのサンプルです
CompilerException clojure.lang.ArityException: Wrong number of args (0) passed to: PersistentVector, compiling:(interface.clj:22:1)
を取得します。
この質問は本当に似ていますが、私はコピーは問題ありませんを参照してください。ドキュメントの一部を、特別な程度にするものです。arglists
Help me write a Clojure macro which automatically adds metadata to a function definition
はそのような何かをしようとしましたが、私はバッククォート内部のバッククォートを持つことができます実現しませんでした。ありがとう! – mattias