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