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

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

0
ClojureScript

在 Clojure 中,关键词被显式地缓存和内部化,以便

(identical? :a :a)

是真实的。

但在 ClojureScript 中情况并非如此,上面的返回值是 false。

这是为什么?

1 个答案

+2

被选中
 
最佳答案

它们在:advanced优化构建中,或者如果您在编译器选项中开启:optimize-contants true

CLJS 增加了额外的keyword-identical?symbol-identical?函数,这些函数可以解决这个差异。

没有在开发构建中完成的原因主要是 JavaScript 直到最近才有了弱引用,以及 Closure Compiler 如果所有关键词都存储在“全局”注册表中,无法恰当地优化它们。

那么这是否意味着数据结构无法依赖于相同的?来实现键的快速相等性吗?
identical? 检查引用等价性。引用是相同的,因此它完全正常工作。

(def x :a)

(identical? x x) ;; 总是 true
...