评论者: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))
`
然而,我认为我的第一种方法是不合语法的,您应该选择后者。