【发布时间】:2014-08-14 22:07:12
【问题描述】:
我正在实现一个自定义数据结构,从所有意图和目的来看,它都是一个排序的地图。我想对其进行编程,以便在涉及映射时可以使用 clojure 的所有抽象,例如 assoc、count 等。为此,我需要将 clojure 的 clojure.lang.IPersistentMap 协议扩展到我的新协议排序的地图类型。
我的问题是:assocEx 是做什么的,或者它的目的是什么?在普通的 clojure 映射上调用它表明它与 assoc 的不同之处在于,如果您尝试在映射中已存在键的位置插入键/值对,它会引发异常:
user> (.assocEx (cast clojure.lang.IPersistentMap {:a :b}) :a 1)
RuntimeException Key already present clojure.lang.Util.runtimeException (Util.java:219)
这与assoc不同,后者只是将地图中的旧值替换为新值:
user> (.assoc (cast clojure.lang.IPersistentMap {:a :b}) :a 1)
{:a 1}
但我似乎找不到显示此功能的“clojure”函数(上面未使用互操作表单/强制转换的函数)。我们在哪里可以看到使用像assoc 这样的普通clojure 抽象函数的这个函数的效果?
【问题讨论】:
标签: java clojure clojure-java-interop