请分享您的想法,参与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
...