在插入元素时尝试抛出异常,需要扫描所有现有的元素来验证它们是否与您要插入的元素可比较,这对性能和可扩展性简直是灾难性的。同样,当您引发比较时捕获异常并将其转换为 `nil`,也会增加额外的开销,而这些开销会浪费在每个正确使用映射的过程中。这只是在Clojure中需要理解相关数据结构的具体合约、正确使用它们才能得到预期结果、否则就会出现意外结果的情况之一(更不用说还需要特殊地实现Clojure导向的所有底层Java类来添加这些功能了)。
在这种情况下,相关数据结构是Java的`SortedMap`接口。下面是JavaDoc的第二段所述内容:
所有插入到排序映射中的键都必须实现`Comparable`接口(或被指定的比较器接受)。此外,所有这样的键都必须相互可比较:`k1.compareTo(k2)`(或`comparator.compare(k1, k2)`)对于排序映射中的任何键`k1`和`k2`都不能抛出`ClassCastException`。尝试违反此限制将导致引起该违规的方法或构造函数调用抛出`ClassCastException`。
当您在JVM Clojure中深入了解时,您不可避免地需要学习它构建和交互的Java类库的详细信息。换句话说,在Clojure文档字符串中提供一个指向此JavaDoc的链接以及将其总结/翻译成Clojure术语可能会很有用。