Eli*_*der 10 clojure assertions
我理解Clojure的*assert*变量可以用来关闭断言,但我做的事似乎没有用.
(defn foo [a]
{:pre [(pos? a)]}
(assert (even? a))
[a])
(binding [*assert* false]
(foo 1))
!! exception
(binding [*assert* false]
(foo -2))
!! exception
Run Code Online (Sandbox Code Playgroud)
甚至false在定义时绑定也有同样的问题:
(binding [*assert* false]
(defn bar [a]
{:pre [(pos? a)]}
(assert (even? a))
[a]))
(bar 1)
!! execption
Run Code Online (Sandbox Code Playgroud)
然后甚至直接设置变量也不起作用.
*assert*
is true
(alter-var-root (var *assert*) not)
*assert*
is still true
Run Code Online (Sandbox Code Playgroud)
和
(var-set (var *assert*) false)
*assert*
is still true
Run Code Online (Sandbox Code Playgroud)
所以现在我不明白该怎么做.我很迷惑.
谢谢.
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |