Как заставить 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

Так что теперь я не понимаю, что делать. Я запутался.

Спасибо.

10
задан Eli Schneider 2 February 2011 в 12:35
поделиться