我可以向clojure类型添加字段吗?
Clojure结构可以任意扩展,添加新字段 是否可以以类似的方式扩展类型(使用deftype创建)我可以向clojure类型添加字段吗?,clojure,types,deftype,Clojure,Types,Deftype,Clojure结构可以任意扩展,添加新字段 是否可以以类似的方式扩展类型(使用deftype创建) 编辑:为了让未来的访问者受益,正如Brian在下面指出的,此功能可能会更改。实际上,您可以将类型视为映射,只需扩展clojure.lang.IPersistentMap(神奇地提供了一个实现) 注意 Clojure将类型的语义分为defrecord和deftype。对于大多数应用程序级编程,您都希望使用记录。方便的是,它们自动提供了一个clojure.lang.IPersistentMap的实现,
编辑:为了让未来的访问者受益,正如Brian在下面指出的,此功能可能会更改。实际上,您可以将类型视为映射,只需扩展clojure.lang.IPersistentMap(神奇地提供了一个实现) 注意
Clojure将类型的语义分为
defrecord
和deftype
。对于大多数应用程序级编程,您都希望使用记录。方便的是,它们自动提供了一个clojure.lang.IPersistentMap
的实现,不需要魔法。deftype仍在进行中,事情可能会发生变化。例如,这在Clojure 1.2中不起作用,您只会得到一个java.lang.AbstractMethodError,正如您在没有提供任何实现的情况下所期望的那样。这对于Clojure 1.2的早期测试版是有效的。我添加了一个注释,用于提及最终版本中的更改。
(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}