评论者: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))
`
然而,我认为我的第一个方法不够规范,建议您使用后两种方法。