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

欢迎!请参阅关于页面获取更多关于此工作方式的信息。

0
提问于 ClojureScript

针对

`

{1 '1}

`

您遇到的问题

`

{1 1}

`

回答者

0
评论者:spinningtopsofdoom

这里是如何从 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 作为函数会给出正确的结果。但在我们有一个以上 8 个元素之前,hash-set 宏会给出错误的结果,并且用 PersistentHashSet 的 fromArray 方法代替创建 set 的 PersistentArrayMap 的字面量。

{1 2 3 4}

`

字面量表示不管有多少元素都是错误的。

0
回答者

评论者:jira

这两个问题的根本问题在于,使用 PersistentArrayMap 直接创建 PersistentHashSet,其中键是从提供的序列中获取的元素。但它表现在两个地方。

0
评论者:jira

评论者:jira

我采取了一种方法,如果我们看到引号常量,那么不要直接创建 PersistentHashSet,而是通过 fromArray 函数进行。

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

0
by

由 mfikes 发布的评论:

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

0
by

由 aralo 发布的评论:

如果这个补丁/工单还包括以下情况将非常不错

(hash-set "a" \a)

0
by

由 aralo 发布的评论:

我们应该扩大这个工单的范围吗?同样的问题也存在于map中

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

我认为一个可能的解决方案,可以解决引号和字符/字符串的问题,可以在 {{cljs.compiler}} 的 keys/set-members 上调用 {{emit-str}},然后检查唯一性。不过不清楚这是否是一个好主意。

无法解决 {{hash-set}}、{{array-map}} 宏。

编辑:相关工单:CLJS-2087

0
by

由 dnolen 发布的评论:

扩大工单的范围是不受欢迎的。请将其移至单独的问题,并交叉引用谢谢。

0
by

由 mfikes 发布的评论:

补丁不再适用。

0
by
参考: https://clojure.atlassian.net/browse/CLJS-1587 (由 mfikes 提出)
...