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(使用前将#替换为@)