我在clojure程序中使用了许多映射和结构。将这些转换为defrecord有什么好处(除了性能之外)?
Answers:
我认为结构已被弃用,因此我完全不使用它们。
当我在许多地图实例中使用一组固定的知名键时,通常会创建一条记录。最大的好处是:
记录的一些缺点:
Stuart Sierra最近写了一篇有趣的文章“用Clojure 1.2解决表达问题”,其中还包含有关defrecord
以下内容的部分:
http://www.ibm.com/developerworks/java/library/j-clojure-protocols/index.html#datatypes
我认为整篇文章是理解协议和记录的良好起点。
另一个主要好处是记录具有可以分派的类型(其类)。
以下是使用此功能但不能代表所有可能用途的示例:
(defprotocol communicate
(verbalize [this]))
(defrecord Cat [hunger-level]
communicate
(verbalize [this]
(apply str (interpose " " (repeat hunger-level "meow")))))
(defrecord Dog [mood]
communicate
(verbalize [this]
(case mood
:happy "woof"
"arf")))
(verbalize (->Cat 3))
; => "meow meow meow"
(verbalize (->Dog :happy))
; => "woof"
defstruct
。请参阅lispworks.com/documentation/HyperSpec/Body/…。