Elixir-为什么这些重复的头文件没有编译器警告?

问题描述

今天,在遍历一些代码时,我遇到了以下两个函数头,并据我所知,它们应该是重复的。相同数量的参数,没有匹配项或防护措施,让我们绕过第一个参数。但是编译器没有警告我第二个将永远不匹配。为什么会这样?

  def update_display_cache(context,text,line_no,position,adjusted_text,_) do
  def update_display_cache(context,display_line,_) do

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

我还复制并粘贴了整个第一个函数标头和主体,没有进行任何更改,但仍然没有收到警告。

Elixir 1.7.4

解决方法

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

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

  def equals?(a,a),do: true
  def equals?(_,_),do: false

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...