我在我的clojure程序中使用了很多地图和结构.将这些转换为defrecords有什么好处(除了表现)?
Ale*_*ler 89
我认为结构有效地被弃用,所以我根本不使用它们.
当我在许多地图实例中使用一组固定的已知密钥时,我通常会创建一条记录.最大的好处是:
记录的一些缺点:
Mic*_*ohl 14
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"
Run Code Online (Sandbox Code Playgroud)