请在 2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页面以了解更多关于此工作方式的信息。

0
ClojureScript
为了与 Clojure 保持一致性,在 map 的 {{conj}} 实现中添加运行时检查,使得向量参数必须是成对的。

Clojure


user=> (conj {:a 1} [:b 2 2])
执行错误 (IllegalArgumentException) 在用户/eval7 (REPL:1)。
映射的 conj 参数必须是成对向量
user=> (conj {:a 1} [:b])
执行错误 (IllegalArgumentException) 在用户/eval9 (REPL:1)。
映射的 conj 参数必须是成对向量
user=> (conj {:a 1} [])
执行错误 (IllegalArgumentException) 在用户/eval11 (REPL:1)。
映射的 conj 参数必须是成对向量


ClojureScript


cljs.user=> (conj {:a 1} [:b 2 2])
{:a 1, :b 2}
cljs.user=> (conj {:a 1} [:b])
执行错误 (Error) 在 (<cljs repl>:1)。
向量的长度为1时没有第1项

cljs.user=> (conj {:a 1} [])
执行错误 (Error) 在 (<cljs repl>:1)。
向量的长度为0时没有第0项


理由:尽管这会拒绝一些程序,但这些程序是错误的,且无法移植到 Clojure。

1 答案

0
回答
参考:[https://clojure.atlassian.net/browse/CLJS-3111](https://clojure.atlassian.net/browse/CLJS-3111)(由 mfikes 报告)
...