我经常在一个库里看到Clojure的协议时,通常会将协议方法包装在一个函数中,通常添加了很少的功能。例如:
(defprotocol Pfoo
(foo-method [this]))
(deftype Atype [x y]
Pfoo
(foo-method [this] (do-something)))
(defn foo [arg] (foo-method arg))
通常预期客户端调用函数foo,而不是协议中的foo方法。 (请参见Clojurescript核心顶部的协议,以获得此类事例。)
那么为什么协议通常在函数后面?协议方法不能成为面向客户端的部分,而不是包装函数吗?