在 Clojure 中
用户=> (conj {:a 1} '([:b 2] [:c 3]))
执行错误(ClassCastException)在用户/eval3(REPL:1)。
clojure.lang.PersistentVector无法转换成java.util.Map$Entry
但在 ClojureScript 中
cljs.user=> (conj {:a 1} '([:b 2] [:c 3]))
{:a 1, :b 2, :c 3}
存在一个检查,确保条目满足{{vector?}},但我们可以要求它们满足{{map-entry?}}。事实上,当{{vector?}}未满足时给出的错误信息是:“在映射中使用-conj 需要的是_映射条目_或_映射条目的序列_。”
理由:尽管此更改会拒绝一些程序,但这些程序是不正确的(事故性地正确),并且如果它们迁移到 Clojure 将会失败。此外,利用它们是映射条目的这一事实将允许访问它们的键和值,这可以导致代码运行更快。(请参阅 CLJS-3116 中的利用映射条目)