如果我输入repl:
(fn []),它给了我一个匿名函数,它是生成的类的实例化。我在哪里可以找到该类的字节表示?
答案 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以类文件格式接收类名和字节。