在以下链接中调用Java的Clojure,演示了如何编写一段Clojure代码,我们可以直接在Java源代码中调用其功能。为了复制这个过程,我们需要一个名为tiny的Clojure项目,其中包含一个tiny.clj源文件。tiny.clj文件包含以下代码:
输出结果如下:
(ns tiny
(:gen-class
:name com.domain.tiny
:methods [#^{:static true} [binomial [int int] double]]))
(defn binomial
"Calculate the binomial coefficient."
[n k]
(let [a (inc n)]
(loop [b 1
c 1]
(if (> b k)
c
(recur (inc b) (* (/ (- a b) b) c))))))
(defn -binomial
"A Java-callable wrapper around the 'binomial' function."
[n k]
(binomial n k))
(defn -main []
(println (str "(binomial 5 3): " (binomial 5 3)))
(println (str "(binomial 10042 111): " (binomial 10042 111)))
)
将其导出为ttt.jar文件,然后将此文件添加到tinyJava项目(一个java项目)的“引用库”中。在tinyJava项目内部存在一个Main.java文件,其中包含以下代码:
import com.domain.tiny;
public class Main {
public static void main(String[] args) {
int j;
j = (int)tiny.binomial(5, 3);
System.out.println("(binomial 5 3): " + j);
System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));
}
}
输出结果如下:
(binomial 5 3): 10
(binomial 10042, 111): 4.9068389575068143E263
我的问题在Main.java中的以下位置:
j = (int)tiny.binomial(5, 3);
是否有可能进入Clojure源代码?我已经尝试过了,但没有成功。
谢谢。
[编辑]:我将jar文件添加到“引用库”中的方法如下:
1)右键单击项目tinyJava并选择属性
2)选择:Java Build Path
3)选择:Libraries
4)点击:“Add External Jars”
5)然后转到ttt.jar的位置
[编辑2]:对于Scala项目,似乎可以以稍微不同的方式实现此操作(请参见下文),即链接项目而不是显式地导出jar文件。