【发布时间】:2020-12-01 13:28:55
【问题描述】:
今天在浏览一些代码时,我遇到了以下两个函数头,并意识到,据我所知,它们应该是重复的。相同数量的参数,没有匹配或保护让我们绕过第一个。但是编译器并没有警告我第二个永远不会匹配。任何解释为什么会这样?
def update_display_cache(context, text, line_no, position, text, adjusted_text, _) do
def update_display_cache(context, display_line, line_no, position, text, adjusted_text, _) do
我创建了几个带有匹配参数列表的简单函数,包括一个带有尾随 _ 参数的函数,它们都给出了预期的警告。warning: this clause cannot match because a previous clause at line 24 always matches
我还复制并粘贴了整个第一个函数的标题和正文,没有更改,但仍然没有收到警告。
灵药 1.7.4
【问题讨论】:
-
只是为了确定......该函数是否定义在同一个模块中?你确定事情重新编译了吗? (有时删除 _build 目录是最终的检查)
-
如果我错了,请纠正我,但据我所知,这两个函数具有相同数量的参数,没有警卫帮助区分它们。
-
这个历史显然可以追溯到几年前通过几个模块,复制和粘贴。相信我,它已经重新编译了! @GuruStron 这就是问题的重点。除了名称,我看不出标题之间没有区别,那么为什么编译器不警告我呢?
-
@Sinc 是的,错过了有问题的“否”)