1

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

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

4

2 回答 2

3

作为概述,一般过程是:

  • 包括 clojure 运行时:
    import clojure.lang.RT;
  • 使用运行时加载您的命名空间(将编译它):
    RT.loadResourceScript("path/core.clj");
  • 获取要调用的函数的 iFn 对象:
    RT.var("mynamespace.core", "main")
  • 并调用该invoke对象的方法
于 2013-02-25T18:27:44.350 回答
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 代码。

于 2013-02-25T17:04:02.477 回答