2013-02-27 42 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