gpt4 book ai didi

eclipse - 从 Java 调用 Clojure,他们说,这会很容易,他们说

转载 作者:行者123 更新时间:2023-12-01 06:36:19 25 4
gpt4 key购买 nike

我是一名初出茅庐的 Clojure 程序员,在 eclipse 中使用过直接中间的 Java。我试图让我的 Java 程序调用从 http://dev.clojure.org/display/doc/Getting+Started+with+Eclipse+and+Counterclockwise 创建的简单“hello”函数文章。 hello 函数在通过逆时针插件启动的 Clojure REPL 中运行良好。当我尝试从 Java 类执行 hello 函数时出现问题。

谷歌搜索发现基本上有两种方法可以做到这一点:clojure.lang.RT 可以加载 Clojure 源代码并将其作为脚本执行,或者直接在 Clojure 源代码编译成 JAR 时执行。

clojure.lang.RT 变体工作没有问题,但我完全不知道如何让直接调用变体工作。在 Java 文件中,编译器无法解析“myproject.core”。

Clojure 源代码是 core.clj,如下所示,它通过 REPL 像冠军一样工作:

(ns myproject.core
(:gen-class
:name myproject.core
:methods [#^{:static true} [hello [String] String]]))

(defn -main
"I don't do a whole lot."
[& args]
(println "Hello, World!"))

(defn hello [who] (str "Hello " who " !"))

但是,Java 源代码无法编译:
import java.io.*;
import clojure.lang.*;
public class HelloJava {
public static void main( String[] args ) {
loadResourceVariant();
directVariant();
}

public static void directVariant() {
myproject.core.hello( "Bob" );
}

public static void loadResourceVariant() {
try {
RT.loadResourceScript( "myproject/core.clj" );
// Get a reference to the hello function.
Var hello = RT.var( "myproject.core", "hello" );
// Invoke the hello function
Object result = hello.invoke( "Robert" );
System.out.println( result );
} catch ( IOException e ) {
e.printStackTrace();
}
}
}

编译器错误是...
myproject.core cannot be resolved to a type HelloJava.java  /myproject/src  line 11 Java Problem

如何配置我的逆时针项目以将 core.clj 的 .class 表示放入 classes 目录,以便它可以直接从 Java 引用?

这必须是可能的,而无需全面使用 Maven 等。不?

最佳答案

我从 java 调用 clojure 的方式是创建一个 api 命名空间,通常与实现命名空间分开:

(ns test.api
(:use [test.impl :only [f1 f2]])
(:gen-class
:methods [#^{:static true} [exportedF1 [String] int]
#^{:static true} [exportedF2 [String String] void]]))

(defn -exportedF1 [^String query ^String file] (f1 query file))
(defn -exportedF2 [^String query] (f2 query))

那么我一定要 AOT 那个命名空间 ,和uberjar它。

现在只需将该 jar 包含在您的 java 类路径中,您就可以开始了。

关于eclipse - 从 Java 调用 Clojure,他们说,这会很容易,他们说,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com