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

欢迎!请参阅 关于 页面获取更多关于这如何工作的信息。

0
ClojureScript

对于

`

{1 '1}

`

你得到问题

`

{1 1}

`

0
评论者:spinningtopsofdoom

这发生在 has-set 宏和 hash-set 文本字面量中。这是我从 repl 中得到的

cljs.user=> (hash-set 1 '1 2 '2 3 '3 4 '4 5)

`
cljs.user=> (hash-set 1 '1 2 '2 3 '3 4 '4)

{1 2 3 4 5}

cljs.user=> #{ 1 '1 2 '2 3 '3 4 '4}

{1 1 2 2 3 3 4 4}

cljs.user=> #{ 1 '1 2 '2 3 '3 4 '4 5}

{2 1 4 4 3 2 1 3}

cljs.user=> #{ 1 '1 2 '2 3 '3 4 '4 5 '5}

{2 1 4 4 3 2 5 1 3}

cljs.user=> (apply hash-set [1 '1 2 '2 3 '3 4 '4])

{2 5 1 4 4 3 2 5 1 3}

将 hash-set 作为函数调用会给出正确的结果。hash-set 宏在元素超过 8 个之前提供错误的结果,并且使用 PersistentHashSet 的 fromArray 方法而不是为集合创建字面量 PersistentArrayMap。

{1 2 3 4}

`

字面量表示法无论如何都会有错误。

0

评论者:rohitaggarwal

两者背后的根本问题是相同的,即在直接使用 PersistentArrayMap(其中键是从提供的序列中获取的元素)创建 PersistentHashSet。但它在两个地方表现。

0

评论者:rohitaggarwal

我已经采取了如果看到引号常量的方法,则不直接创建 PersistentHashSet,而通过 fromArray 函数进行的方式。

这个补丁包含了修复和一个测试。

0

评论者:mfikes

附加的补丁不再适用于master。

0

评论者:aralo

如果这个补丁/票据也包括以下情况,那将很好

(hash-set "a" \a)

0

评论者:aralo

我们应该增加这个票据的范围吗?对于maps同样存在这个问题

{'0 "a", 0 "b"} {'a "a", "a" "b"}

我认为一个可能的解决方案,它可以解决引号和字符/字符串问题,就是在{{cljs.compiler}}中对keys/set-members调用{{emit-str}},然后仅检查唯一性。但我不确定那是否是一个好主意。

这不能解决{{hash-set}}, {{array-map}}宏。

编辑:相关票据:CLJS-2087

0

评论者:dnolen

增加票据范围是不希望的。请将它移动到单独的问题,并交叉引用表示感谢。

0

评论者:mfikes

补丁不再适用。

0
...