是否可以排除函数/名称空间:在Repl上重新加载?

时间:2015-10-21 10:13:51

标签: clojure

我有两个在dosync中执行IO的函数。因此,当我做一个

(require 'my.namespace :reload)

我明白了:

CompilerException java.lang.IllegalStateException: I/O in transaction, compiling:

有没有办法排除重新加载这两个函数或整个命名空间?

1 个答案:

答案 0 :(得分:6)

如果你有顶级表单有副作用(比如阅读或写东西),你可以保护它们不被defonce宏重新加载:

(defonce launcher (fire-the-missiles))

这样,如果已经定义了启动器,则不会重新评估定义启动器的表单。顶级表单中有太多副作用会产生代码味道,因为当你想重新加载它们时会更加困难。