问题标签 [clojure-java-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
848 浏览

clojure - 难以理解:Clojure 中的状态

我明白什么:state/does/。它在您的类中创建一个字段,就像在 Java 中一样。我不明白这是什么意思?似乎我只看到它使用 Clojure 生成的扩展其他类的类来完成。http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html就是一个例子。我不懂Java,也不太精通面向对象编程。有人可以向我解释 :state 的意义吗,以及它在哪里适合 Java 互操作?

非常感谢!

注意:当我说 :state 时,我指的是 (:gen-class :state)

0 投票
4 回答
15505 浏览

clojure - Clojure:以惯用的 Clojure 方式使用 java.util.HashMap

我有一个java.util.HashMap对象m(调用 Java 代码的返回值),我想获得一个带有附加键值对的新映射。

如果m是 Clojure 地图,我可以使用:

但是尝试一下HashMap会给出:

java.lang.ClassCastException:java.util.HashMap 无法转换为 clojure.lang.Associative

没有运气seq

java.lang.ClassCastException:clojure.lang.IteratorSeq 不能转换为 clojure.lang.Associative

我设法做到这一点的唯一方法是使用HashMap's own put,但这会返回void,所以我必须明确返回m

这不是惯用的 Clojure 代码,而且我正在修改m而不是创建新地图。

如何以HashMap更接近 Clojure 的方式使用?

0 投票
9 回答
48047 浏览

java - 从java调用clojure

大多数关于“从 java 调用 clojure”的热门谷歌点击都已过时,建议使用clojure.lang.RT它来编译源代码。假设您已经从 Clojure 项目构建了一个 jar 并将其包含在类路径中,您能否帮助清楚地解释如何从 Java 调用 Clojure?

0 投票
3 回答
12786 浏览

java - Java 和 Clojure 与 Leiningen

是否可以在使用 leiningen 的项目中与 Clojure 一起轻松管理和编译原生 Java 类?

我在一个相当低的级别(使用 netty nio)工作,并认为在构建代码和性能方面,一些管道类实际上更容易作为原始 java 处理。

0 投票
2 回答
2840 浏览

clojure - 在 Clojure 中创建 Java 类的选项

在 Clojure 中创建 Java 类有几种不同的方法,那么在 Clojure 中选择 、 和 时有gen-class哪些proxy权衡reify?(还有其他方法可以创建我没有列出的 Java 类吗?)

我的基本理解是,我按功率降序列出了这些结构。

0 投票
1 回答
134 浏览

clojure - clojure - 定义记录中的名称冲突?

我有一段行为不端的代码;当我命名记录MethodInfo时,它不再正确覆盖.toString方法。

运行一个简单的测试显示这是如何失败的,

而将记录重命名为A显示代码行为正确,

我究竟做错了什么??

0 投票
2 回答
12902 浏览

clojure - 为什么 Clojure 有 5 种方法来定义一个类而不是只有一种?

Clojure 具有 gen-class、reify、proxy 以及 deftype 和 defrecord 来定义新的类类数据类型。对于一种重视语法简单性并厌恶不必要的复杂性的语言来说,这似乎是一种反常。有人可以解释为什么会这样吗?Common Lisp 风格的 defclass 就足够了吗?

0 投票
4 回答
3392 浏览

clojure - 如何在 clojure 中参数化对 Java 枚举的访问?

假设我有一个 Java 枚举。例如:

通常,我可以使用该枚举在 clojure 中做一些事情,如下所示:

但是,我想编写一个 clojure 函数,允许调用者指定要使用的枚举实例:

这个想法是让调用者传入"DIAMONDS"并让DIAMONDS枚举实例绑定slet.

我可以cond对参数进行匹配,但这似乎比必要的要笨重。我想我也可以使用宏来构造Suits/添加到suit. 这是这样做的方式还是我缺少一种非宏观方式?

0 投票
2 回答
638 浏览

functional-programming - Clojure 的惰性如何与对 Java/不纯代码的调用交互?

今天我们在代码中偶然发现了一个问题,无法回答这个 Clojure 问题:

Clojure 是严格还是懒惰地评估不纯代码(或对 Java 代码的调用)?

似乎副作用 + 惰性序列会导致奇怪的行为。


以下是我们所知道的导致问题的原因:

Clojure 有惰性序列:

而且 Clojure 有副作用和不纯的功能:

此外,Clojure 可以调用 Java 对象,这可能包括副作用。但是,副作用可能与惰性求值的交互作用很差:

所以它返回了前 5 个元素,但打印了前 31 个!

我假设如果在 Java 对象上调用副作用方法,也会出现同样类型的问题。这可能会使推理代码和弄清楚会发生什么变得非常困难。


辅助问题:

  • 程序员是否应该注意和防止这种情况?(是的?)
  • 除了序列,Clojure 是否执行严格的评估?(是的?)
0 投票
6 回答
4426 浏览

java - 使用 Java 对象作为 Clojure 映射

我有一个想在 Clojure 中使用的 Java 类。但是,我想将它用作 Clojure 映射。这样做需要哪些步骤?

我查看了代码IPersistentMap——Java 类应该实现它吗?还是应该有一些实现协议的 Clojure 代码?

我知道我可以编写一些映射代码,将代码从 Java 对象显式转换为映射,但该解决方案具有很高的工作/回报率。另外,我可能会多次遇到同样的情况。


具体示例:我有一个用 Java 编写的解析器。我想用它来解析一些文本,然后访问解析后的数据结构的内容,就好像它在 Clojure 映射中一样: