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