gpt4 book ai didi

unit-testing - Midje 在 Clojure 中使用宏失败

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:41 27 4
gpt4 key购买 nike

这是代码的通过版本:

正常功能:通过

(defn my-fn
[]
(throw (IllegalStateException.)))

(fact
(my-fn) => (throws IllegalStateException))

这是它的宏版本:

(defmacro my-fn
[]
(throw (IllegalStateException.)))

(fact
(my-fn) => (throws IllegalStateException))

这里失败的输出是:

LOAD FAILURE for example.dsl.is-test
java.lang.IllegalStateException, compiling:(example/dsl/is_test.clj:14:3)
The exception has been stored in #'*me, so `(pst *me)` will show the stack trace.
FAILURE: 1 check failed. (But 12 succeeded.)

这是相同的代码,我只是将 defn 更改为 defmacro

我不明白为什么这不起作用?

最佳答案

问题是你的宏是错误的。当您的函数在运行时抛出错误时,宏会在编译时抛出错误。以下内容应修复该行为:

(defmacro my-fn
[]
`(throw (IllegalStateException.)))

现在您的宏调用将被抛出的异常所取代。类似的东西:

(fact
(throw (IllegalStateException.)) => (throws IllegalStateException))

关于unit-testing - Midje 在 Clojure 中使用宏失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664590/

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