评论者: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, 正在编译:...
user=>
`
在我看来,如果 defprotocol 能够用一个更有信息量的消息来警告方法冲突,将会更好。