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