gpt4 book ai didi

clojure - 我应该在 Clojure 中哪里使用 defrecord?

转载 作者:行者123 更新时间:2023-12-03 00:58:11 27 4
gpt4 key购买 nike

我在 clojure 程序中使用了许多映射和结构。将这些转换为 defrecords 有什么好处(除了性能之外)?

最佳答案

我认为结构实际上已被弃用,因此我根本不使用它们。

当我在许多 map 实例中使用一组固定的众所周知的键时,我通常会创建一条记录。最大的好处是:

  • 性能
  • 生成的类具有我可以在多方法或其他情况下打开的类型
  • 通过 defrecord 周围的附加宏机制,我可以获得字段验证、默认值以及我想要的任何其他内容
  • 记录可以实现任意接口(interface)或协议(protocol)( map 不能)
  • 在大多数情况下,记录都可以充本地图
  • 键和值以稳定(每次创建)顺序返回结果

记录的一些缺点:

  • 因为记录是 Java 类实例(不是 Clojure 映射),所以不存在结构共享,因此相同的记录结构可能会比已更改的等效映射结构使用更多的内存。尽管 JVM 是专门为处理这种短暂的垃圾而设计的,但当您“更改”记录时,还会有更多的对象创建/销毁。
  • 如果您在开发过程中更改记录,您可能需要更频繁地重新启动 REPL 以获取这些更改。这通常只是开发过程中的一个小问题。
  • 许多现有库尚未更新以支持记录(postwalk、zip、ma​​tchure 等)。我们已根据需要添加了此支持。

关于clojure - 我应该在 Clojure 中哪里使用 defrecord?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com