2013-02-27 58 views
1

我想在我的Java代碼中訪問我的一些clojure函數(我正在使用Eclipse和CounterClockWise)。首先,我不知道該怎麼做?但後來我找到了一些答案here找不到類路徑上的Clojure資源

我使用clojure.lang.RT package在我的Java代碼中調用.clj文件。在命名命名空間時,.clj文件遵循如ns test.clojure.core文件的適當慣例,在test.clojure包中,其中內核是.clj文件。另外,根據一些信息,我在我的project.clj中添加了java源路徑(即java源路徑src/test/java)和源路徑(即源路徑src/test/clojure)。

但是,當我運行我的Java文件後出現以下錯誤 - a)Could not locate Clojure resource on classpath b)Attempting to call unbound fn

如果社區中的任何人通過詳細的程序或教程可以幫助我(假設我是絕對初學者),我將不勝感激,因爲只有我可以獲得的信息(使用clojure.lang.RT)非常少。

期待得到一個完整的答案來結束我的沮喪。

回答

2

我想你正在使用RT.loadResourceScript這是造成問題。 你可以試試這樣的:

//Load the namespace 
    RT.var("clojure.core","eval").invoke(RT.var("clojure.core","read-string").invoke("(use 'test.clojure.core)")); 

//Find a function in namespace 
    IFn fn = (IFn)RT.var("test.clojure.core","hello"); 

//Call that function 
    fn.invoke(); 
+0

會試試這個。順便說一句,有任何適當的文件和/或相同的教程。 – user2108042 2013-02-27 17:42:54

+0

嗨Ankur,我嘗試了下面的clojure代碼: **'(ns test.clojure.core) (defn hello-world [x] (str「Hello」x))'**和Java代碼: **'RT.var(「clojure.core」,「eval」)。invoke(RT.var(「clojure.core」,「hello-world」)。invoke(「(use'test.clojure.core)」 )); \t \t \t IFn fn =(IFn)RT.var(「test.clojure.core」,「hello」); \t \t \t對象result = fn.invoke(); '** 現在我得到這個錯誤:**試圖調用未FN:#' clojure.core /你好世界** – user2108042 2013-02-27 18:07:17

+0

'RT。 var(「clojure.core」,「eval」)。invoke(RT.var(「clojure.core」,「read-string」)。invo ke(「(use'test.clojure.core)」)); IFn fn =(IFn)RT.var(「test.clojure.core」,「hello-world」);對象結果= fn.invoke(「test」);' – Ankur 2013-02-28 04:12:01