repl在哪里放置所有动态编译的类文件?

时间:2014-04-08 23:12:58

标签: clojure

如果我输入repl:

(fn []),它给了我一个匿名函数,它是生成的类的实例化。我在哪里可以找到该类的字节表示?

2 个答案:

答案 0 :(得分:1)

它在记忆中。即使在非REPL代码中(即在.clj文件中),您也可能永远不会看到.class文件;它只是编译成字节码并在必要时运行它。

这是Michal Marczyk关于.clj文件的优秀comment的摘录:

  

通常不会生成实际的.class文件,但您可以要求   如果你愿意的话(参见(doc compile)和(doc compile-files ))。   大部分时间没有理由担心这个问题。请注意这一点   Clojure的操作模式并不特别; Python做到了   同样的事情,将.py文件编译为Python字节码然后运行   它

根据this thread,甚至手动请求编译(通过gen-class)也无法通过REPL进行,因为gen-class会查找.clj个文件转为.class档案。

P.S。要将一个对象转储到一个文件(我知道这不完全是你所追求的),你可以查看this site,它只使用clojure.core/prn来序列化一个类,然后使用java.io. FileWriter将其转储到文件中。

答案 1 :(得分:0)

只要加载或(重新)定义类,就可以使用Instrumentation来注册要调用的变换器。 Transformer以类文件格式接收类名和字节。