如何在不重置repl的情况下重新加载已编译的类?

时间:2013-04-15 03:58:52

标签: clojure

我使用gen-class定义了一个java类,每次启动repl时都会编译。但是,如果我希望对类进行更改,我发现我必须重新启动并重新编译该类。无论如何都要在不关闭repl的情况下执行此操作吗?

一个例子

我正在研究https://github.com/zcaudate/hara/blob/master/src/hara/ova/impl.clj

项目中有一条线。 CLJ

:aot [hara.ova.impl]

所以说文件已经加载了,我可以这样做:

(import hara.ova.Ova)
(def a (Ova.))

我想在类中添加另一个方法bar,我只想在-bar命名空间中定义hara.ova.impl,调用compile-gen-class函数来重新加载类和然后做 这没有重新加载repl:

(import hara.ova.Ova)
(def a (Ova.))
(.bar a)

现在,C-c C-k不允许这样做。

1 个答案:

答案 0 :(得分:5)

您需要在命名空间上调用compile函数。

(ns test) (gen-class :name test.Cls) (comment (compile 'test))

需要对编译调用进行注释,以便它不会递归调用自身。我经常将这些留在我的开发文件中,以通过评估编译表达式来快速重新编译定义。