假设我们在IntelliJ Idea中安装了一个Java项目,其中安装了La Clojure
插件,并将clojure.jar
库作为外部库导入。
我希望在我们的Java项目结构中添加一个Clojure file.clj
,并使用此文件中的函数进行进一步的内部目的。
如何在Java项目中创建clojure文件,然后从那里使用clojure代码?我看了几个变种,但它对我不起作用或者仅仅是不够。即使在YouTube上也有大量的虚拟视频,只是展示了如何运行一个repl,但没有关于如何将java和clojure结合在一起并将其变为简单,愉快和方便的编程规则。 例如:
input.clj:
(defn foo [a b] (str a " " b))
Hello.java
public class Hello {
psvm {
//invoke: (foo "Hello from file.clj")
}
}
更新 感谢您的帮助,刚开始使用Clojure 1.6.0并且没想到会那么容易。
/** Question: If I won't declare and init IFn, then Java throws "Exception
* in thread "main" java.lang.ExceptionInInitializerError" during an attempt
* to read the file. Why? And how not to use IFn if not really necessary?
*/
IFn require = Clojure.var("clojure.core", "require");
// Import file input.clj with a bunch of functions
clojure.lang.Compiler.loadFile("input.clj");
// Call foo
IFn foo = Clojure.var("clojure.core", "foo");
Object result = foo.invoke("Hi", "there");
// Feel good
System.out.println(result);
答案 0 :(得分:3)
除了史蒂夫的评论是这个问题的正确答案之外,还要注意Cursive(基于La Clojure的旧分支,不再处于积极开发阶段)为这些调用提供支持(两者都是API和RT.var)。您可以从Java导航到Clojure代码,从Clojure中查找Usages将找到Java用法,并且您在Java字符串中有自动完成功能。当你必须使用这些表格时,这真的很有帮助。完全披露:我开发了Cursive,我添加了所有这些因为我在Cursive中使用了很多。
答案 1 :(得分:1)
如果您使用的是Clojure 1.6,请查看https://stackoverflow.com/a/23555959/24396和http://clojure.github.io/clojure/javadoc/clojure/java/api/package-summary.html
对于Clojure 1.5,您必须使用clojure.lang.RT