如何修改clojure fn或宏的arglist屬性?如何將a:arglists修改爲Clojure fn或宏?
(defn tripler ^{:arglists ([b])} [a] (* 3 a))
(defn ^{:arglists ([b])} quadrupler [a] (* 4 a))
% (meta #'tripler) =>
{:arglists ([a]), :ns #<Namespace silly.testing>, :name tripler, :line 1, :file "NO_SOURCE_PATH"}
% (meta #'quadrupler) =>
{:arglists ([a]), :ns #<Namespace silly.testing>, :name quadrupler, :line 1, :file "NO_SOURCE_PATH"}
好吧,沒有運氣那裏,所以我嘗試做以下。
(def tripler
(with-meta trippler
(assoc (meta #'tripler) :arglists '([c]))))
% (with-meta #'tripler) =>
{:ns #<Namespace silly.testing>, :name tripler, :line 1, :file "NO_SOURCE_PATH"}
嗯,所以現在的:arglists鍵已不見了?那麼,我放棄了,我該怎麼做?我只想修改:arglists的值。上面的例子使用了defn,但我也想知道如何使用宏(defmacro)來設置:arglists。
雖然這是真的,但是'defn'允許你指定一個attr-map,這是一個乾淨的方式來完成Stephen想要的。請參閱下面的答案。 –