我的理解是,Clojure的*assert*
變量可以用來關閉斷言,但是我所做的一切似乎都不起作用。如何讓Clojure尊重`* assert *`變量?
(defn foo [a]
{:pre [(pos? a)]}
(assert (even? a))
[a])
(binding [*assert* false]
(foo 1))
!! exception
(binding [*assert* false]
(foo -2))
!! exception
即使在定義綁定時false
有同樣的問題:
(binding [*assert* false]
(defn bar [a]
{:pre [(pos? a)]}
(assert (even? a))
[a]))
(bar 1)
!! execption
然後甚至設置變量直接不工作。
*assert*
is true
(alter-var-root (var *assert*) not)
*assert*
is still true
和
(var-set (var *assert*) false)
*assert*
is still true
所以現在我不理解的事。我很困惑。
謝謝。
這是行不通的。您可以通過測試環境變量來動態關閉此功能。 – Virmundi 2016-03-08 04:25:04