我正在用多個子結構在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