调试在java代码(eclipse)中调用的clojure函数



在下面的链接中,从java调用clojure,演示了如何编写clojure代码,然后我们可以在java源代码中直接调用其功能。为了复制,我们有一个叫做tiny的clojure项目,它里面有一个tiny。CLJ源文件。微小的。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)))
)

然后导出为tt.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源代码?我试过了,但没有用。

感谢

[EDIT]:我将jar添加到参考库的方式如下:

1)右键单击项目tinyJava &选择属性

2)选择:Java Build Path 3)选择:Libraries 4)点击:"Add External Jars"

5)然后转到ttt.jar

的位置

[EDIT 2]:对于scala项目,似乎可以通过稍微不同的方式实现这一点(见下文),即链接项目而不是显式导出jar文件。

例如,用Scala似乎很容易做到这一点(注意下面的文章也讨论了互操作:如何从Java调用Scala对象?)

我所做的是:

1)建立一个名为firstScala的Scala项目,并添加一个文件MyPrinter。Scala代码:

class MyPrinter{ 
  def printTerm() {
        print("hello");
  }
}
2)然后我创建了一个名为firstScalaJava的Java项目,然后我添加了一个名为Main.java的文件,其中包含以下代码:
class Main {
    public static void main(String args[]) {
        MyPrinter myPrint = new MyPrinter();
        myPrint.printTerm();
    }
}

3)然后右键单击firstScalaJava,选择"属性",选择"Java构建路径",选择"项目"选项卡,单击"添加",选择第一个scala项目。

4)然后,如果我在"myPrint.printTerm();"处设置一个断点,并在调试器停止时单击F5,调试器将自动进入Scala源文件。

这样做的好处是,我不需要导出任何jar文件或类似的东西。这很吸引人,因为在更改Scala代码时不需要做任何事情(eclipse会在之后尝试运行java项目时自动重建Scala项目),而如果我更改Clojure代码,我需要重新导出jar等…(注意,以上述方式链接项目并不适用于clojure的情况)

最新更新