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

Zur*_*iar 2 clojure

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

(require 'my.namespace :reload)
Run Code Online (Sandbox Code Playgroud)

我明白了:

CompilerException java.lang.IllegalStateException: I/O in transaction, compiling:
Run Code Online (Sandbox Code Playgroud)

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

Art*_*ldt 6

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

(defonce launcher (fire-the-missiles))
Run Code Online (Sandbox Code Playgroud)

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