gpt4 book ai didi

clojure - Clojure 中有超过 1 个可变参数重载的多参数函数的解决方法吗?

转载 作者:行者123 更新时间:2023-12-02 15:21:34 25 4
gpt4 key购买 nike

我创建了一个宏,其定义如下所示:

(defmacro my-macro
[strategy & body]
...)

你可以这样调用这个宏:

(my-macro {:strategy "some"}
(do-something ..))

现在我希望宏可选接受绑定(bind)。像这样:

(my-macro [my-value (load-value ..)]
{:strategy my-value}
(do-something ..))

所以我尝试将宏扩展为如下所示:

(defmacro my-macro
([strategy & body] `(my-macro [] ~routes ~body))
([bindings strategy & body]
...))

但这失败了:

java.lang.RuntimeException: Can't have more than 1 variadic overload

是否有解决此问题的好方法或推荐的方法是什么?

最佳答案

我的典型解决方法是检查传递给 my-macro 的整个参数列表并决定是否使用绑定(bind):

(defmacro my-macro
[& body]
(let [bindings (if (vector? (first body)) (first body) [])
[strategy body*] (if (seq bindings) (rest body) body)]
`(let ~bindings
(do-something-with ~body* ~strategy))))

关于clojure - Clojure 中有超过 1 个可变参数重载的多参数函数的解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052078/

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