我正在用多个子结构在Clojure中开发一个复杂的数据结构。从Clojure中抽象出数据结构的实现细节
我知道我会希望随着时间的推移来扩展这个结构,并且有时可能想改变内部结构而不会破坏数据结构的不同用户(例如,我可能想要将矢量变成散列表,添加某些类型的索引结构的性能方面的原因,或结合了Java类型)
我现在的想法是:
- 定义一个协议与各种存取方法的整体结构
- 创建的一个小型图书馆导航数据结构的功能e 。G。 (查询子-ABC参数1参数2)
- 实现使用defrecord或DEFTYPE数据结构,定义为使用小型图书馆
我认为这将工作在协议方式,但我很担心它开始看起来像很多“胶水”代码。另外它也可能反映了我对面向对象方法的更加熟悉。
在Clojure中做这件事的推荐方式是什么?
谢谢Michal!洞察力一如既往:-)肯定会研究ILookup和关联选项 – mikera 2010-06-25 13:54:25
这是一个非常有用的答案!但是将近三年后,基于现在可用的1.5版本的功能更新它(或创建一个新的答案)会很好。我注意到的一件事是'defrecord'现在发出工厂函数,不知道其他更改可能会影响此答案。 – 2013-05-01 17:11:58
我认为这个答案也可以使用更新 - 即使是O'Reily Clojure的书现在也说clojure的defrecord会创建工厂函数。 – djhaskin987 2013-09-01 02:47:55