Clojure:直接访问数据类型的唯一字段

时间:2013-04-14 04:14:55

标签: data-structures types clojure

假设我的数据类型只包含一个包含有序映射的字段。

(defrecord AdjacencyList [data])
(def adjacency-list (AdjacencyList. (sorted-map 1 {2 100}, 2 {3 -100})))

现在,如果我想操纵字段并保持其类型,我必须做这样的事情:

(AdjacencyList. (dissoc (:data adjacency-list) 2))

有没有办法通过调用记录来引用该字段?

(dissoc adjacency-list 2)

如果我需要一个常规的哈希映射,我可以使用记录的地图实现,但我需要一个有序的映射,我使用集合和向量得到其他类似的数据类型。

解决方案是使用deftype而不是自己实现所需的数据结构,但我希望没有必要。

1 个答案:

答案 0 :(得分:2)

Clojure的update-in函数适用于各种关联集合,包括有序映射和defrecords:

(update-in adjacency-list [:data] dissoc 2)