我正在阅读Clojure in Action第8章关于TDD的内容,并尝试了存根宏。它使用动态绑定机制来存根函数。遗憾的是,在Clojure 1.3中,不可能对非动态变量使用绑定机制,因此存根宏在大多数情况下都不起作用,除非您显式声明指向函数动态的var。然后我想知道在Midje中存根是如何做的,并试图找到'provided‘的源代码,但我找不到它。所以它是这样的:
在Midje中如何在事实中实现“provided”?有人能详细解释一下吗?
发布于 2011-11-10 01:03:56
Clojure 1.3提供了一个带有-redefs的宏,即使对没有声明为dynamic的var也可以使用:
user=> (def this-is-not-dynamic)
user=> (with-redefs [this-is-not-dynamic 900] this-is-not-dynamic)
900为了向后兼容,Midje使用自己的版本,其内部如下所示:
(defn alter-one-root [[variable new-value]]
(if (bound? variable)
(let [old-value (deref variable)]
(alter-var-root variable (fn [current-value] new-value))
[variable old-value])
(do
(.bindRoot variable new-value)
[variable unbound-marker])))https://stackoverflow.com/questions/7861469
复制相似问题