clojure fn 또는 매크로의 : arglist 속성을 어떻게 수정합니까?: 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을 사용하지만 매크로를 사용하는 arglists (defmacro)를 설정하는 방법을 알고 싶습니다.
사실,'defn'은 attr-map을 지정할 수있게 해 주며, 이는 스티븐이 원하는 것을보다 깨끗한 방법으로 수행합니다. 아래 내 대답을 참조하십시오. –