如何在Java中访问clojure函数?

时间:2013-02-25 16:28:53

标签: java clojure

我是Clojure的新手。我正在尝试在Clojure中构建我的计算单元(纯函数),并使用Java将所有这些函数绑定到一个程序中。

为了在Java中访问Clojure,我做了一件事,即提前编译和类生成。但它看起来很麻烦,削弱了将Clojure用于我的应用程序的想法。所以我的问题是有没有人试图在Java中访问Clojure函数(不包括类生成和AOT编译)?如果没有,那么如何使用纯粹的Clojure将这些计算单元(或Clojure函数)链接到一个程序(其中有几个相互关联的方法)?

2 个答案:

答案 0 :(得分:3)

正如概述the general process

  • 包括clojure运行时:
    import clojure.lang.RT;
  • 使用运行时加载命名空间(将编译它):
    RT.loadResourceScript("path/core.clj");
  • 获取您想要呼叫的功能的iFn对象:
    RT.var("mynamespace.core", "main")
  • 并在该对象上调用invoke方法

答案 1 :(得分: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代码。