如何使用La Clojure插件在Java项目中创建clojure文件?

时间:2014-07-11 16:15:26

标签: java intellij-idea clojure

假设我们在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);

2 个答案:

答案 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/24396http://clojure.github.io/clojure/javadoc/clojure/java/api/package-summary.html

对于Clojure 1.5,您必须使用clojure.lang.RT