【发布时间】:2016-02-01 12:46:27
【问题描述】:
我有一个 Maven 项目,我在 clojure-maven-plugin 的帮助下混合了 java 和 Clojure 代码。
我有一个这样的 Clojure 命名空间:
(ns org.myproject.clojure
(:gen-class))
(defn do-stuff [] (println "Doing stuff"))
在java中,我这样称呼它:
IFn require = Clojure.var("clojure.core", "require");
require.invoke(Clojure.read("org.myproject.clojure"));
IFn do_stuff = Clojure.var("org.myproject.clojure", "do-stuff");
do_stuff.invoke();
运行此代码时,“Doing stuff”会正确打印到屏幕上。此外,我可以在 maven 生成的 jar 中看到我的 clojure 代码的 .class 文件。尽管如此,当我需要命名空间时,我仍然不确定 clojure 在做什么。它是重新编译整个事情吗?或者我的代码是否使用我的设置正确编译了 AOT?
最后,有没有办法可以将我的 clojure 代码视为“常规”java 函数?也就是说,导入 org.myproject.clojure 并将 do-stuff 作为常规函数调用?鉴于 clojure 正在为我的代码生成字节码。我不明白为什么 java 不能称它为字节码兼容。
【问题讨论】:
-
我知道的不够多,无法回答您的问题,但this 可能会有所帮助。