评论由:wagjo 发布
我认为我们不需要它。为什么扩展一个协议但不实现其方法,然后调用这些方法并期望它们不抛出异常?明确您的类型应该做什么,无论是默认行为还是自定义行为。您基本上有三个选择
`
(defn default-foo
[this]
:foo)
(defprotocol P
(-foo [this]))
(deftype T
P
(-foo [this] (default-foo))
(defn foo
[x]
(-foo x))
`
或者
`
(defprotocol P
(-foo [this]))
(deftype T)
(defn foo
[x]
(if (satisfies? P x)
(-foo x)
:foo))
`
或者
`
(defprotocol P
(-foo [this]))
(extend-protocol P
java.lang.Object
(-foo [this] :foo))
(deftype T)
(defn foo
[x]
(-foo x))
`
我认为第一个方法不符合 Clojure 的风格,您应该更喜欢后两种方法。