gpt4 book ai didi

java - 在 clojure 中,assocEx 是做什么用的?

转载 作者:行者123 更新时间:2023-11-30 08:21:18 26 4
gpt4 key购买 nike

我正在实现一个自定义数据结构,就所有意图和目的而言,它是一个排序的映射。我想对其进行编程,以便在涉及映射时可以使用 clojure 的所有抽象,例如 assoccount 等。为此,我需要将 clojure 的 clojure.lang.IPersistentMap 协议(protocol)扩展到我的新排序映射类型。

我的问题是: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”函数(上面未使用互操作形式/转换的函数)。使用普通的 clojure 抽象函数(如 assoc),我们在哪里可以看到该函数的效果?

最佳答案

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

关于java - 在 clojure 中,assocEx 是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com