当前位置: 首页 > 面试题库 >

从Java调用Clojure

居焱
2023-03-14
问题内容

对于“从Java调用Clojure”而言,大多数Google热门歌曲都已过时,建议您使用它clojure.lang.RT来编译代码。假设您已经从Clojure项目构建了一个jar并将其包含在类路径中,那么您能否帮助您清楚地说明如何从Java调用Clojure?


问题答案:

从Clojure 1.6.0开始,有一种新的首选方式来加载和调用Clojure函数。现在,此方法优于直接调用RT(并在此取代了许多其他答案)。Javadoc在这里 -主要入口是clojure.java.api.Clojure。

要查找并调用Clojure函数:

IFn plus = Clojure.var("clojure.core", "+");
plus.invoke(1, 2);

中的功能clojure.core会自动加载。其他名称空间可以通过require加载:

IFn require = Clojure.var("clojure.core", "require");
require.invoke(Clojure.read("clojure.set"));

IFn可以传递给更高阶的函数,例如下面的示例传递plusread

IFn map = Clojure.var("clojure.core", "map");
IFn inc = Clojure.var("clojure.core", "inc");
map.invoke(inc, Clojure.read("[1 2 3]"));

IFnClojure中的大多数s都引用函数。但是,有少数是指非功能数据值。要访问这些,请使用deref代替fn:

IFn printLength = Clojure.var("clojure.core", "*print-length*");
IFn deref = Clojure.var("clojure.core", "deref");
deref.invoke(printLength);

有时(如果使用Clojure运行时的其他部分),你可能需要确保Clojure运行时已正确初始化-为此目的,在Clojure类上调用方法就足够了。如果你不需要在Clojure上调用方法,则只需使类加载就足够了(过去曾经有类似的建议来加载RT类;现在首选):

Class.forName("clojure.java.api.Clojure") 


 类似资料:
  • 问题内容: 我创建了一个xPages应用程序,该应用程序使用了位于服务器端javascript库中的许多服务器端javascript代码功能。 现在,我有一些Java代码位于java设计元素中,我想使用它们来调用javascript函数。 我确实知道从Java调用javascript是不合逻辑的,但是我想所有服务器端javascript都已编译为java,因此我认为可能可以获取所生成的已编译jav

  • 问题内容: 从python调用Java的最佳方法是什么?(对我来说,jython和RPC不是一个选择)。 我听说过JCC:http : //pypi.python.org/pypi/JCC/1.9 一个用于从C / Python调用Java的C 代码生成器,但这需要编译所有可能的调用。我希望有另一个解决方案。 我听说过JPype:http ://jpype.sourceforge.net/ 教程:

  • 我需要从Java中调用一些Python代码。 我知道Jython存在,或者Java有自己的Python解释器。 问题是,所说的Python代码使用一些本机(C)编译代码,甚至在GPU上运行一些东西。 所以我可以把它分为两个问题: < Li > Jython或Java的Python解释器支持这个吗?也就是说,Python代码(当从Java调用时)将与所有的C和GPU部分一起运行,因此运行速度将与它独

  • 我已经编写了一个.bat文件(因为我现在正在Windows上测试):- > 我将.bat文件保存在MongoDB的/bin文件夹中。 如果我直接从Windows命令提示符调用.bat文件,该文件可以正常工作。 以下是Java控制台的输出:

  • 从Clojoure调用Java非常简单明了,但反过来已被证明是不可预测的。 它们似乎有两种方式: 1)以下类别 2) 将clojure编译成uberjar,然后将其导入java代码。 我选择了第二个选项,因为它更直接。 这是clojure代码 这是Java代码。 当我做出“service.returned(4);”时,系统永远不会返回。我不太明白为什么对我来说,它会像函数没有从Clojure返回一

  • 问题内容: 在这里,我并不是在创建RESTful服务,实际上我必须从Java代码中调用外部Restful服务。目前,我正在使用Apache HttpClient实现此功能。我从Web服务获得的响应是​​XML格式。我需要从XML提取数据并将其放在Java对象上。听说不是使用SAX解析器,而是可以使用JAX- RS和JERSEY来自动将xml标记映射到相应的Java对象。 我一直在浏览,但是找不到开