排序映射在键查找失败时抛出异常

2023-12-03

user=> (def m (sorted-map 1 2))
#'user/m
user=> (map? m)
true
user=> (get m :type)
ClassCastException java.lang.Long cannot be cast to clojure.lang.Keyword
  clojure.lang.Keyword.compareTo (Keyword.java:114)

看起来sorted-map选择了数值比较函数,该函数不会与关键字进行比较。

最好推理一下,“这个东西支持 IPercientMap。所以,我可以调用get查明它是否是我所知道的一种地图,而不会引发异常。” 的文档字符串get说“返回映射到键的值,未找到或 nil(如果键不存在)”。

在键查找时抛出异常是一个错误吗?更重要的是,是否有一种安全、标准的方法来检查任意对象是否属于给定的“类型”(由与其关联的值定义):type key)?


似乎合理的是sorted-map应该在某种程度上具有可比性,但情况并非如此1 and :type,这就是您异常的原因。

话虽如此,我认为您应该能够使用任何类型的键查询地图并获得nil如果提供的键和映射中的键不具有可比性。

您可以通过提供自己的比较器来解决问题sorted-map-by进行所需的类型检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序映射在键查找失败时抛出异常 的相关文章

随机推荐