Elixir - 为什么没有针对这些重复标头的编译器警告?

Sin*_*inc 2 elixir compiler-warnings

今天在浏览一些代码时,我遇到了以下两个函数头,并意识到,据我所知,它们应该是重复的。相同数量的参数并且没有匹配或保护让我们绕过第一个。但是编译器没有警告我第二个永远不会匹配。任何解释为什么会这样?

  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
Run Code Online (Sandbox Code Playgroud)

我用匹配的参数列表制作了几个简单的函数,包括一个带有尾随 _ 参数的函数,它们都给出了预期的警告。
warning: this clause cannot match because a previous clause at line 24 always matches

我还没有更改地复制并粘贴了整个第一个函数标题和正文,但仍然没有收到警告。

长生不老药 1.7.4

sab*_*ara 8

该参数text在第一个定义中出现了两次,添加了额外的约束,即这两个值必须相等才能匹配。

一个更简单的最小示例重现它:

  def equals?(a, a), do: true
  def equals?(_, _), do: false
Run Code Online (Sandbox Code Playgroud)