等价
cljs 的数据结构是在 js 基础之上实现的. 数值类型的数据可以直接判断.
一般通过 (= a b) 判断 a 和 b 的内容是否一致.
基于 collection 的数据除了 = 函数之外,
还可以使用 identical? 函数判断两个数据的引用是否一致.
cljs 当中实现了 persistent data structure,
虽然是不可变数据, 但创建新数据一般会进行结构复用,
也就是说, 比如下面这个例子, b 在内部实现中就可以复用 a 的某些部分
(def a {
:a 1
:b 2
:c 3
})
(def b (assoc a :d 4))
判断引用所需要的步骤往往很少, 所以几乎没有多少开销. 而递归判断内容一致很可能需要对数据结构进行遍历, 影响性能.
有兴趣可以顺着链接继续翻不可变数据.