不可变数据

ClojureScript 中默认采用不可变数据作为底层实现.

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

(def a {:a 1 :b 2})
; #'cljs.user/a
(assoc a :c 3)
; {:a 1, :b 2, :c 3}
a
; {:a 1, :b 2}

比如 Vector 的实现, 底层是一棵树, 通常在操作时能做到结构共享从而做到内存和性能的优化. 具体可以参考文章: part 1 part 2 part 3

比如 List 的实现, 实际是单链表.

关于 HashMap HashSet 等其他的数据结构还需要查阅更多文档...

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

results matching ""

    No results matching ""