评论者:sohta
这可能超出了这个议题的范围,但协议方法冲突可能会引起某些其他类型的错误
`
user=> (defprotocol P1 (finalize [this]))
P1
user=> (defrecord R1 [] P1 (finalize [this]))
编译时出错:java.lang.VerifyError: (class: user/R1, method: finalize signature: ()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 能用更详尽的消息警告方法冲突会更好。