欢迎!请查看关于页面以了解更多关于如何使用本网站的信息。
在Clojure中,关键词会被显式地缓存和内联,以便
(identical? :a :a)
这是正确的。
在ClojureScript中,情况并非如此,上述代码返回的是false。
这是为什么?
它们在:advanced优化构建或在编译器选项中开启:optimize-contants true时存在。
:advanced
:optimize-contants true
CLJS添加了额外的keyword-identical?和symbol-identical?函数来解决这个问题。
keyword-identical?
symbol-identical?
开发构建中没有进行这项操作的原因主要是JavaScript直到最近才有了弱引用,同时也因为Closure Compiler无法正确优化如果所有关键词都存储在一个“全局”注册表中。