gpt4 book ai didi

clojure - 在将符号传递给 Clojure 中的宏之前,是否可以将符号解析为其值?

转载 作者:行者123 更新时间:2023-12-02 01:14:27 26 4
gpt4 key购买 nike

假设我有以下关键字数组

(def keys [::description ::url ::mailing-list])

我想在两个规范中重用;一个用于定义映射,另一个用于定义函数的可选参数。
(require '[clojure.spec :as spec])

(spec/def ::project-map
(spec/keys :opt-un keys))

(spec/def ::project-args
(spec/keys* :opt-un keys))

那么问题是 keyskeys*通过带引号的符号 'keys而不是它所指的变量中保存的解析值。

所以我的问题是:是否可以像普通的 lisp #. 一样在读取时解析键的值reader 宏,或者如果宏获得符号而不是列表文字,是否必须重新定义宏以解析符号?

最佳答案

您也可以将它们包装在另一个宏中,因为宏负责如何评估它们的参数。

(defmacro def-both [name name* keys]
`(do (s/def ~name (s/keys :opt-un ~keys))
(s/def ~name* (s/keys* :opt-un ~keys))))

(user/def-both ::project-map ::project-args [::description ::url ::mailing-list])

关于clojure - 在将符号传递给 Clojure 中的宏之前,是否可以将符号解析为其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321732/

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