Erlang 不会警告未使用的函数参数

哈勃

如果我声明一个函数

test(A) -> 3.

Erlang生成有关变量A未使用的警告然而定义

isEqual(X,X) -> 1.

不产生任何警告,但

isEqual(X,X) -> 1;
isEqual(X,Y) -> 0.

再次产生警告,但仅针对第二行。

胡安法科罗

之所以不生成警告,是因为在第二种情况下,您通过使用相同的变量名称断言(通过模式匹配),第一个和第二个参数isEqual/2具有相同的值。所以你实际上是在使用参数的值。

如果我们查看从is_equal/2. 您可以.core通过.erl以下方式编译您的文件来获取源文件:(erlc +to_core pattern.erl请参阅此处了解pattern.erl)。

这将产生一个pattern.core看起来像这样文件(module_info/[0,1]删除了函数):

module 'pattern' ['is_equal'/2]
  attributes []

'is_equal'/2 = fun (_cor1,_cor0) ->
                   case <_cor1,_cor0> of
                     %% Line 5
                     <X,_cor4> when call 'erlang':'=:=' (_cor4, X) ->
                       1
                     %% Line 6
                     <X,Y> when 'true' ->
                       0
                   end

如您所见,源代码is_equal/2中的每个函数子句.erl都被转换为caseCore Erlang 中的一个子句。X确实在第一个子句中使用,因为它需要与另一个参数进行比较。另一方面,在第二个子句中既不使用XY也不使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Erlang:变量“ _”未绑定

来自分类Dev

从Erlang Shell使用Rabbitmq-erlang-client?

来自分类Dev

Erlang butlast函数

来自分类Dev

Erlang sumif函数

来自分类Dev

外部函数调用Erlang

来自分类Dev

Erlang中的函数链接

来自分类Dev

erlang ets选择错误的参数

来自分类Dev

erlang ets选择错误的参数

来自分类Dev

Erlang中非终止函数的类型

来自分类Dev

在Erlang函数之外声明变量

来自分类Dev

递归函数调用挂起,Erlang

来自分类Dev

Erlang中非终止函数的类型

来自分类Dev

在Erlang函数之外声明变量

来自分类Dev

使用ets函数读取mnesia表(erlang)

来自分类Dev

如何使用变量调用Erlang函数?

来自分类Dev

何时在Erlang中使用宏函数?

来自分类Dev

如何使用erlang函数term_to_json?

来自分类Dev

Erlang帮助:在匿名函数中使用If语句

来自分类Dev

使用列表处理堆栈,erlang

来自分类Dev

使用Erlang列出复制挑战

来自分类Dev

Erlang示例中的安全使用

来自分类Dev

将匿名函数作为参数传递给Erlang中的函数?

来自分类Dev

Erlang:NIF和透析仪警告

来自分类Dev

Erlang:NIF和透析仪警告

来自分类Dev

在Erlang中的函数中传递映射类型参数会报错

来自分类Dev

在Erlang中的函数中传递映射类型参数会报错

来自分类Dev

查看请求erlang / ChicagoBoss的所有参数

来自分类Dev

Erlang ChicagoBoss传递url获取参数

来自分类Dev

Erlang ChicagoBoss传递url获取参数