等价

cljs 的数据结构是在 js 基础之上实现的. 数值类型的数据可以直接判断. 一般通过 (= a b) 判断 ab 的内容是否一致. 基于 collection 的数据除了 = 函数之外, 还可以使用 identical? 函数判断两个数据的引用是否一致.

cljs 当中实现了 persistent data structure, 虽然是不可变数据, 但创建新数据一般会进行结构复用, 也就是说, 比如下面这个例子, b 在内部实现中就可以复用 a 的某些部分

(def a {
  :a 1
  :b 2
  :c 3
})

(def b (assoc a :d 4))

判断引用所需要的步骤往往很少, 所以几乎没有多少开销. 而递归判断内容一致很可能需要对数据结构进行遍历, 影响性能.

有兴趣可以顺着链接继续翻不可变数据.

results matching ""

    No results matching ""