在clojure中,assocEx是什么?

时间:2014-08-14 22:07:12

标签: java clojure clojure-java-interop

我正在实现一个自定义数据结构,出于所有意图和目的,它是一个有序映射。我想对它进行编程,以便我可以在地图上使用所有clojure的抽象,例如assoccount等。为了做到这一点,我需要扩展我的新排序地图类型的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} 只是用新的值替换地图中的旧值:

assoc

但我似乎无法找到一个" clojure"函数(上面没有使用互操作形式/强制转换的函数)显示此功能。我们在哪里使用正常的clojure抽象函数(如{{1}}?

)看到此函数的效果

1 个答案:

答案 0 :(得分:2)

再也没有使用过assocEx了。它是早期的残余。如果您正在编写自己的地图类型,则可以实施(assocEx [m k v] (throw (Exception.)))