gpt4 book ai didi

clojure - 如何修改 :arglists to a Clojure fn or macro?

转载 作者:行者123 更新时间:2023-12-04 22:14:39 24 4
gpt4 key购买 nike

如何修改 clojure fn 或宏的 :arglist 属性?

(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。

最佳答案

alter-meta!更改 var 上的元数据。函数的元数据不相关,只有 var。

(alter-meta! #'tripler assoc :arglists '([b]))

关于clojure - 如何修改 :arglists to a Clojure fn or macro?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com