我有一个记录:
(defrecord Foo [a b])
及其实例方法
(defn inc-a-field [this] (into this {:a (inc (:a this))}))
最佳做法是为此定义协议吗? (因为它是特定的Foo)
答案 0 :(得分:3)
是的,如果要将协议附加到记录类型,最好先使用所有需要的方法定义协议。另一种方法是使用普通函数而不附加记录。
协议对于有状态操作非常方便。例如,请查看carmine connection record implementation。
但如果您的记录只是具有预定义结构的地图,那么最好使用普通的clojure函数。
您还应该看this question,它与您的非常相似。