【问题标题】:In clojure, what is assocEx for?在 clojure 中,assocEx 是做什么用的?
【发布时间】:2014-08-14 22:07:12
【问题描述】:

我正在实现一个自定义数据结构,从所有意图和目的来看,它都是一个排序的地图。我想对其进行编程,以便在涉及映射时可以使用 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}

但我似乎找不到显示此功能的“clojure”函数(上面未使用互操作表单/强制转换的函数)。我们在哪里可以看到使用像assoc 这样的普通clojure 抽象函数的这个函数的效果?

【问题讨论】:

    标签: java clojure clojure-java-interop


    【解决方案1】:

    不再使用assocEx。它是更早时期的遗迹。如果你正在编写自己的地图类型,你可以实现(assocEx [m k v] (throw (Exception.)))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      相关资源
      最近更新 更多