gpt4 book ai didi

macros - 你能强制 Clojure 宏评估它的参数吗?

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

我正在尝试定义一个包装clojure.test/deftest的辅助函数。这是我的总体想法:

(defn test-wrapper
[name & body]
(deftest (symbol (clojure.string/replace name #"\W" "-")) body)))

但是,由于 deftest 的第一个参数未计算,因此它会抛出异常,因为它是一种形式而不是符号。有没有办法强制表单首先评估?

最佳答案

这里更好的方法是使 test-wrapper 成为一个宏。宏不会评估它们的参数,除非您告诉它们这样做。您可以操作参数并在某些生成的代码中替换它们,如下所示:

(use 'clojure.test)

(defmacro test-wrapper
[name & body]
(let [test-name (symbol (clojure.string/replace name #"\W" "-"))]
`(deftest ~test-name ~@body)))

(test-wrapper "foo bar" (is (= 1 1)))

(run-tests)

关于macros - 你能强制 Clojure 宏评估它的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995335/

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