Elixir - 为什么这些重复 headers 没有编译器警告?
Elixir - why is there no compiler warning for these duplicate headers?
今天,在浏览一些代码时,我遇到了以下两个函数 headers 并意识到,据我所知,它们应该是重复的。相同数量的参数,没有匹配项或守卫让我们绕过第一个。但是编译器并没有警告我第二个永远不会匹配。任何解释为什么会这样?
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
我还复制并粘贴了整个第一个函数 header 和 body,没有任何更改,但仍然没有收到警告。
长生不老药 1.7.4
参数 text
在第一个定义中出现了两次,添加了这两个值必须相等才能匹配的额外约束。
复制它的一个更简单的最小示例:
def equals?(a, a), do: true
def equals?(_, _), do: false
今天,在浏览一些代码时,我遇到了以下两个函数 headers 并意识到,据我所知,它们应该是重复的。相同数量的参数,没有匹配项或守卫让我们绕过第一个。但是编译器并没有警告我第二个永远不会匹配。任何解释为什么会这样?
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
我还复制并粘贴了整个第一个函数 header 和 body,没有任何更改,但仍然没有收到警告。
长生不老药 1.7.4
参数 text
在第一个定义中出现了两次,添加了这两个值必须相等才能匹配的额外约束。
复制它的一个更简单的最小示例:
def equals?(a, a), do: true
def equals?(_, _), do: false