2013-02-25 54 views
1

我是Clojure的新手。我試圖在Clojure中構建我的計算單元(純函數),並使用Java將所有這些函數綁定到一個程序中。如何在Java中訪問clojure函數?

爲了訪問Java中的Clojure,我做了一件事,即提前編譯和類生成。但看起來很麻煩,並削弱了將Clojure用於我的應用程序的想法。所以我的問題是有沒有人試圖訪問Java中的Clojure函數(不包括類生成和AOT編譯)?如果不是,那麼如何使用純Clojure將這些計算單元(或Clojure函數)鏈接到一個程序(其中有幾個方法相互關聯)?

回答

3

,正如概述the general process是:

  • 包括Clojure的運行時間:
    import clojure.lang.RT;
  • 使用運行時加載你的名字空間(這會編譯):
    RT.loadResourceScript("path/core.clj");
  • 得到iFn您想要調用的功能的對象:
    RT.var("mynamespace.core", "main")
  • 並致電invoke該方法
+0

感謝亞瑟的穩定答覆。我嘗試了上述步驟和提供的教程。但在某個地方它正在破裂。 詳細信息 - 我創建了單獨的Java類型項目,並在相同的路徑中指定path ='C:/Workdesk/Java/Eclips~1/LearningClojure/clojure-test/src/test/clojure/clojure.mysql.clj '(這個clojure.mysql.clj文件在單獨的項目中)。點擊運行後,我收到錯誤 - 找不到類路徑中的Clojure資源:C:\ Workdesk \ Java \ Eclips〜1 \ LearningClojure \ clojure-test \ src \ test \ clojure \ clojure.mysql.clj。 任何線索。 – user2108042 2013-02-26 16:54:02

+0

如果你的clojure是在一個單獨的項目中有時候爲這個項目構建一個jar文件(默認情況下會包含.clj文件)並且將這個jar文件包含在你想要使用clojure代碼的項目中。 (假設maven處理你的類路徑) – 2013-02-26 18:44:37

+0

嗨亞瑟,我很困難,因爲我得到「無法找到類路徑上的Clojure資源」錯誤一次又一次。同時我發佈了完整的信息[這裏](http://stackoverflow.com/questions/15116334/could-not-locate-clojure-resource-on-classpath)。 – user2108042 2013-02-27 15:53:35

0

看看我的clojure-utils庫。這裏有很多方便的工具來調用Java的Clojure代碼。

這裏有一個簡單的演示:

import mikera.cljutils.Clojure; 

public class DemoApp { 
    public static void main(String [] args) { 
     String s = "(+ 1 2)"; 
     System.out.println("Evaluating Clojure code: "+s); 

     Object result=Clojure.eval(s); 
     System.out.println("=> "+ result); 
    } 
} 

我寧願避免AOT編譯:改用公用事業mikera.cljutils.Clojure加載,編譯和運行時動態執行的Clojure代碼。