如果您调用了一个协议函数,但传递了错误的参数数量(比如忘记了一个参数),当前会显示一条消息说“在协议 ... 中未找到对应于函数 ... 的单个方法 ...”。有疑问的代码从 Reflector 中获取匹配的方法,并在匹配数量不等于 1 时创建此消息。
这里实际上有两种情况:
- 匹配数 == 0 - 这通常是由于拼写错误而频繁发生的
- 匹配数 > 1 - 这可能不太经常发生
我建议将 == 0 的情况改为在开头使用稍微不同的文本,并在其中提供有关预期参数数量的提示
"未找到具有参数数量 ... 的接口 ... 中的方法 ... 的协议函数 ..."。
匹配数 >1 的情况应进行类似更改:“找到多个方法:接口 ... 中的方法 ... 具有参数数量 ... 协议 ... 中的函数 ...”。
修复已附加。我使用了巢状 if/else 的情况下可能更好的性能的情况。我并不确定报告的参数数量是否应该匹配实际的 Java 方法参数数量或 Clojure 协议函数参数数量(包括目标)。我做了前者。
我没有添加测试,因为我并不确定检查测试中的错误信息是否合适。如果需要,我很乐意添加。