我可以在clojure类型中添加字段吗?

时间:2010-03-19 05:41:03

标签: clojure types deftype

可以任意扩展Clojure结构,添加新字段。

是否可以以类似的方式扩展类型(使用deftype创建)?

编辑:对于未来访客的好处,正如布莱恩在下面指出的,这个功能可能会有所变化。

1 个答案:

答案 0 :(得分:7)

实际上你可以将类型视为地图,你只需要扩展clojure.lang.IPersistentMap(一个魔法提供的实现)。

(deftype A [a b]
  clojure.lang.IPersistentMap)
(A 1 2) ;; => #:A{:a 1, :b 2}
(assoc (A 1 2) :c 3) ;; => #:A{:a 1, :b 2, :c 3}

注意

Clojure已经将类型的语义分为defrecorddeftype。对于大多数应用程序级编程,您将需要使用记录。方便的是,它们自动提供clojure.lang.IPersistentMap的实现,没有必要的魔法。