如果您调用协议函数但传递了错误的arity(例如忘记一个参数),目前显示的消息是“没有在接…中找到单个方法…以替换协议…中的函数…”。问题代码从Reflector获取匹配方法并在此匹配数量不等于1的情况下创建此消息。
实际上有两种情况:
– 匹配 == 0 – 这通常因为拼写错误而频繁发生
– 匹配 > 1 – 这可能不常发生
我提议对于那些== 0的情况,开头应有稍微不同的文字,并在其中包含有关期望arity的提示
"未找到arity…的接口…的方法:…,以替换协议…的函数…".
>1的情况应有类似的变化:"发现多个方法的:…的接口…,以替换协议…的函数…".
补丁已附加。我使用了case,相比嵌套if/else可能会有更好的性能。我不确定报告的arity是否应该匹配实际的Java方法arity还是Clojure协议函数arity(包括目标)。我做了前者。
我没有添加测试,因为我不确定检查测试中的错误消息是否合适。如果需要,我很乐意添加。