如果您调用协议函数时传入了错误的函数参数(例如忘记一个参数),您现在会看到一个消息说“没有找到接口 ... 中的单个方法 ... 的函数 ... 的协议 ...”。在这个情况下,相关的代码从 Reflector 中获取匹配的方法,如果匹配的数量不等于 1,则创建此消息。
实际上有两种情况
- 匹配 == 0 - 这通常是由于拼写错误导致的
- 匹配 > 1 - 假设这种情况不太常见
我建议 == 0 的情况应该开头略有不同并在其中提供有关预期的参数数量的提示
"没有找到参数 ... 的接口 ... 的方法 ... 的协议 ... 函数 ..."。
>1 的情况应该有类似的变化:"找到多个方法:... 的接口 ... 的参数 ... 的协议 ... 函数 ..."。
补丁已附上。我使用了 cases,这可能比嵌套的 if/else 更好。我不确定是否应该报告的参数数量应与实际的 Java 方法参数数量匹配,还是与 Clojure 协议函数参数数量(包括目标)匹配。我选择了前者。
我没有添加测试,因为我不确定在测试中检查错误信息是否适当。如果要求,我很乐意添加。