问题标签 [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.
clojure - 难以理解:Clojure 中的状态
我明白什么:state/does/。它在您的类中创建一个字段,就像在 Java 中一样。我不明白这是什么意思?似乎我只看到它使用 Clojure 生成的扩展其他类的类来完成。http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html就是一个例子。我不懂Java,也不太精通面向对象编程。有人可以向我解释 :state 的意义吗,以及它在哪里适合 Java 互操作?
非常感谢!
注意:当我说 :state 时,我指的是 (:gen-class :state)
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 的方式使用?
java - 从java调用clojure
大多数关于“从 java 调用 clojure”的热门谷歌点击都已过时,建议使用clojure.lang.RT
它来编译源代码。假设您已经从 Clojure 项目构建了一个 jar 并将其包含在类路径中,您能否帮助清楚地解释如何从 Java 调用 Clojure?
java - Java 和 Clojure 与 Leiningen
是否可以在使用 leiningen 的项目中与 Clojure 一起轻松管理和编译原生 Java 类?
我在一个相当低的级别(使用 netty nio)工作,并认为在构建代码和性能方面,一些管道类实际上更容易作为原始 java 处理。
clojure - clojure - 定义记录中的名称冲突?
我有一段行为不端的代码;当我命名记录MethodInfo时,它不再正确覆盖.toString方法。
运行一个简单的测试显示这是如何失败的,
而将记录重命名为A显示代码行为正确,
我究竟做错了什么??
clojure - 为什么 Clojure 有 5 种方法来定义一个类而不是只有一种?
Clojure 具有 gen-class、reify、proxy 以及 deftype 和 defrecord 来定义新的类类数据类型。对于一种重视语法简单性并厌恶不必要的复杂性的语言来说,这似乎是一种反常。有人可以解释为什么会这样吗?Common Lisp 风格的 defclass 就足够了吗?
clojure - 如何在 clojure 中参数化对 Java 枚举的访问?
假设我有一个 Java 枚举。例如:
通常,我可以使用该枚举在 clojure 中做一些事情,如下所示:
但是,我想编写一个 clojure 函数,允许调用者指定要使用的枚举实例:
这个想法是让调用者传入"DIAMONDS"
并让DIAMONDS
枚举实例绑定s
到let
.
我可以cond
对参数进行匹配,但这似乎比必要的要笨重。我想我也可以使用宏来构造Suits/
添加到suit
. 这是这样做的方式还是我缺少一种非宏观方式?
functional-programming - Clojure 的惰性如何与对 Java/不纯代码的调用交互?
今天我们在代码中偶然发现了一个问题,无法回答这个 Clojure 问题:
Clojure 是严格还是懒惰地评估不纯代码(或对 Java 代码的调用)?
似乎副作用 + 惰性序列会导致奇怪的行为。
以下是我们所知道的导致问题的原因:
Clojure 有惰性序列:
而且 Clojure 有副作用和不纯的功能:
此外,Clojure 可以调用 Java 对象,这可能包括副作用。但是,副作用可能与惰性求值的交互作用很差:
所以它返回了前 5 个元素,但打印了前 31 个!
我假设如果在 Java 对象上调用副作用方法,也会出现同样类型的问题。这可能会使推理代码和弄清楚会发生什么变得非常困难。
辅助问题:
- 程序员是否应该注意和防止这种情况?(是的?)
- 除了序列,Clojure 是否执行严格的评估?(是的?)
java - 使用 Java 对象作为 Clojure 映射
我有一个想在 Clojure 中使用的 Java 类。但是,我想将它用作 Clojure 映射。这样做需要哪些步骤?
我查看了代码IPersistentMap
——Java 类应该实现它吗?还是应该有一些实现协议的 Clojure 代码?
我知道我可以编写一些映射代码,将代码从 Java 对象显式转换为映射,但该解决方案具有很高的工作/回报率。另外,我可能会多次遇到同样的情况。
具体示例:我有一个用 Java 编写的解析器。我想用它来解析一些文本,然后访问解析后的数据结构的内容,就好像它在 Clojure 映射中一样: