Clojure 2024 年调查问卷!中分享您的想法。

欢迎!请参阅关于页面了解有关此功能的更多信息。

0
ClojureScript
已关闭

你好,
我在使用 sorted-map 时遇到了一些奇怪的行为,我认为这可能是 bug 或文档不完整。

具体来说,当创建一个具有不同类型键的排序 cmap,如下所示: (sorted-map :k1 :v1 "k2" :v2) 时,使用类似 (:k1 (sorted-map :k1 :v1 "k2" :v2)) 的方式查找会抛出异常: 无法比较 k2 与 :k1。这可能是由于在 sorted-map 实现中使用了 compare

虽然全面支持异构键可能是首选行动(对我来说),但似乎更合理地要求 cmap 的键是可比较的,但据我认为这一点应在该文档中说明。

即使这是一个要求,似乎更符合 Clojure 的一般设计精神,在查找过程中返回 nil,而不是抛出异常。在我看来,当向 cmap 添加无法与其他键比较的键时抛出异常似乎更有意义。您怎么看?

祝好,
Simon

by











我想澄清,我听到了你的话,理解了你的困惑和挫折!在文档中尝试解决这个问题希望能有所帮助,但我仍然预期人们会遇到类似这样的情况。我知道我绝对是,而且有时还会遇到,尽管我来自Java的背景。试图构建一个在具有自己历史和不同哲学的庞大生态系统中的統一、優秀的語言是一项巨大的挑战。
by
> 试图构建一个在具有自己历史和不同哲学的庞大生态系统中的統一、優秀的語言是一项巨大的挑战。

非常同意,即便是完全自己拥有的两个系统之间保持一致性都很有挑战性。Clojure能够在拥有如此长久历史和两个(或更多)生态系统之上保持语言的統一性,这是对其深刻思考的证明,我对此表示赞赏

1 答案

0
by

这是预期的行为(与在按不处理查找键类型的比较器排序的映射中查找键时Java的行为相匹配)。

by
编辑 by
谢谢你的快速回答!
作为一个从Clojurescript进入Clojure生态系统的人,我的Clojure和Java背景都很少,这真的不是那么直观(因为其余的语音设计得很合理,并旨在最小化意外)。

你会考虑在sorted-map文档中解释这种行为吗?

就像这样:“一个`sorted-map`会允许你关联异构键,但不会允许查找。这与Java在按不处理查找键类型的比较器排序的映射中查找键时的行为相匹配)”
...