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

zca*_*ate 6 clojure

我已经定义了一个java类gen-class,每次启动repl时都会编译.但是,如果我希望对类进行更改,我发现我必须重新启动并重新编译该类.反正有没有关闭repl吗?

一个例子

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

项目中有一条线.CLJ

:aot [hara.ova.impl]
Run Code Online (Sandbox Code Playgroud)

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

(import hara.ova.Ova)
(def a (Ova.))
Run Code Online (Sandbox Code Playgroud)

我想bar在类中添加另一个方法,我只想-barhara.ova.impl命名空间中定义,调用一个compile-gen-class函数来重新加载类,然后在不重新加载repl的情况下执行此操作:

(import hara.ova.Ova)
(def a (Ova.))
(.bar a)
Run Code Online (Sandbox Code Playgroud)

现在,Cc Ck不允许这样做.

Jer*_*ier 5

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

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

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