Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以向clojure类型添加字段吗?_Clojure_Types_Deftype - Fatal编程技术网

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

我可以向clojure类型添加字段吗?,clojure,types,deftype,Clojure,Types,Deftype,Clojure结构可以任意扩展,添加新字段 是否可以以类似的方式扩展类型(使用deftype创建) 编辑:为了让未来的访问者受益,正如Brian在下面指出的,此功能可能会更改。实际上,您可以将类型视为映射,只需扩展clojure.lang.IPersistentMap(神奇地提供了一个实现) 注意 Clojure将类型的语义分为defrecord和deftype。对于大多数应用程序级编程,您都希望使用记录。方便的是,它们自动提供了一个clojure.lang.IPersistentMap的实现,

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

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


编辑:为了让未来的访问者受益,正如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}