我是 clojure 的新手,我试图理解在不同情况下可用的不同设计选择。在这种特殊情况下,我想对紧密耦合的功能进行分组,并使其可以作为集合传递函数。
何时使用函数映射来对紧密相关的功能进行分组,何时使用协议(+ 实现)?
有哪些优点和缺点?
哪个更惯用?
作为参考,这里有两个例子来说明我的意思。使用 fn 地图:
(defn do-this [x] ...)
(defn do-that [] ...)
(def some-do-context { :do-this (fn [x] (do-this x)
:do-that (fn [] (do-that) }
在第二种情况下,
(defprotocol SomeDoContext
(do-this[this x] "does this")
(do-that[this] "does that")
(deftype ParticularDoContext []
SomeDoContext
(do-this[this x] (do-this x))
(do-that[this] (do-that))