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

欢迎!请参阅关于页面了解有关此工作方式的一些更多信息。

0
ClojureScript

对于

`

{1 '1}

`

你得到

`

{1 1}

`

9个答案

0

评论者:spinningtopsofdoom

这发生在 has-set 宏和 hash-set 字面量中。以下是从 REPL 中获得的输出

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

{1 2 3 4 5}

cljs.user=> (hash-set 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}

{2 1 4 4 3 2 1 3}

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

{2 1 4 4 3 2 5 1 3}

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

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

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

{1 2 3 4}

`

将 hash-set 作为函数调用给出正确的结果。hash-set 宏给出错误的结果,直到我们拥有超过8个元素,然后用 PersistentHashSet 的 fromArray 方法来构建集合,而不是为集合创建一个字面量 PersistentArrayMap。无论元素数量如何,字面量标记都是错误的。

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
...