2013-02-25 35 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代码。