我有两个在dosync中执行IO的函数。因此,当我做一个
(require 'my.namespace :reload)
我明白了:
CompilerException java.lang.IllegalStateException: I/O in transaction, compiling:
有没有办法排除重新加载这两个函数或整个命名空间?
答案 0 :(得分:6)
如果你有顶级表单有副作用(比如阅读或写东西),你可以保护它们不被defonce
宏重新加载:
(defonce launcher (fire-the-missiles))
这样,如果已经定义了启动器,则不会重新评估定义启动器的表单。顶级表单中有太多副作用会产生代码味道,因为当你想重新加载它们时会更加困难。