我是一名初出茅庐的程序员,在eclipse中直接使用Java。我试图让我的Java程序调用从http://dev.clojure.org/display/doc/Getting从Eclipse和逆时针文章开始。hello函数在通过逆时针插件启动的Clojure REPL中运行良好。当我试图从Java类执行hello函数时,会出现问题。
谷歌搜索发现,基本上有两种方法可以做到这一点:clojure。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
如何配置逆时针项目以放置。核心的类表示。将clj放入classes目录中,以便可以直接从Java中引用它?
这必须是可能的,而不是完全针对Maven之类的人。不
我想用户clartaq在这里回答了您的问题:从java调用clojure。
总结一下——如果要将Clojure函数导出到Java,请遵循以下步骤:
lein new com。实例stuff
而不仅仅是lein new stuff
-foo
如果函数被调用foo
(ns…)
文件顶部的表单以导出函数
- 编辑你的
项目。clj
触发AOT编译的文件 - 构建一个uberjar文件
如果想了解我是如何应用这种方法的,请查看我的GitHub页面。
我从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(我相信是4.15),打开程序后,它给出了一个错误窗口。 我相信是版本问题。然而,我找不到任何关于我的版本不是最新的或太先进。我运行的是Java1.8.0。
我读了一些关于这个问题的帖子,但找不到一个彻底的答案。我有一个有3行的ListView,每行包含一个TextView和一个EditText,还有一个扩展BaseAdapter的自定义适配器。 这是适配器的getView函数: 如您所见,每次值发生变化时,我都尝试用EditText值更新名为RowsList的ColorColumn列表。由于某种原因,onTextChanged方法被调用了太多次,因此
基本上,我试图通过双方的手机号码实现通话。我使用的是PHP laravel。 > 每个代理都有一个各自的表单,用于收集访问者的电话号码。 当代理表格通过访客填写时。 我想让Twilio API先调用代理。 如果代理收到电话,则应拨打访客的电话号码。 并将这两方联系起来。 就这些 正在拨打代理人的电话号码。。但这是我想要的,当代理接到电话时,它应该拨打访客的电话号码。 我已经在这里更新了我的代码。。
我打字的时候 是物体吗? 谁能给我解释一下在java中每样东西都是一个对象?
Vert.x Api 是很大程度上由事件驱动的。这意味着,当事情发生在你感兴趣的Vert.x,Vert.x 会通过回调方式向您发送events。 一些示例events: 计时器激活 socket收到数据 从磁盘读取数据 发生了异常 HTTP 服务器收到请求 通过向 Vert.x Api 提供处理程序来处理事件。例如要接收一个计时器事件每一秒你会做: vertx.setPeriodic(1000,
问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf