通常,当我在库中看到 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 核心顶部的协议。
那么为什么协议经常被隐藏在函数后面呢?协议方法不能成为面向客户端的部分,而不是包装功能吗?