评论者:sohta
这可能超出了这个问题的范围,但协议方法冲突可能会引起其他类型的错误
`
user=> (defprotocol P1 (finalize [this]))
P1
user=> (defrecord R1 [] P1 (finalize [this]))
编译器异常 java.lang.VerifyError: (类:user/R1,方法:finalize 签名:()Ljava/lang/Object;) 无法从一个空栈上弹出操作数,正在编译:...
user=> (defprotocol P2 (wait [this]))
P2
user=> (defrecord R2 [] P2 (wait [this]))
user.R2
user=> (def r (->R2))
'user/r
user=> (wait r)
编译器异常 java.lang.IllegalArgumentException: No single method: wait of interface: user.P2 found for function: wait of protocol: P2, compiling: ...
user=>
`
在我看来,如果defprotocol能够提供一个更具信息性的消息来警告方法冲突会更好。