为什么Erlang的变量是未使用的?(Why Erlang variable is unused?)

2019-08-01 05:37发布

为什么编译的代码:

triples( [], _,_,_)->
  [];

triples( Self, X, Y, none )->
  [ Result || Result = { X, Y, _} <- Self ].

报告:

./simple_graph.erl:63: Warning: variable 'X' is unused
./simple_graph.erl:63: Warning: variable 'Y' is unused
./simple_graph.erl:64: Warning: variable 'X' is unused
./simple_graph.erl:64: Warning: variable 'X' shadowed in generate
./simple_graph.erl:64: Warning: variable 'Y' is unused
./simple_graph.erl:64: Warning: variable 'Y' shadowed in generate

而返回错误的结果:全自助。

Answer 1:

这是因为发生在发电机的LHS变量,X和Y在这里,是局部的修真新绑定变量。 这意味着,他们是不相同的变量三元组的头和X和Y,因此,不存在隐含相等测试。 这种类似的玩意儿其中一个有趣的头部出现的所有变量是本地的乐趣ALSE新的变数。

这是不同于大多数的Erlang的休息,这是为什么编译器不仅警告说,在头部X和Y不使用,但也是在修真X和Y阴影的其他变量。 他们也是在修真未使用的任何地方。

一个简单的方法来获得你想要的是:

[ Result || Result = {X1,Y1,_} <- Self, X =:= X1, Y =:= Y1 ]


文章来源: Why Erlang variable is unused?
标签: erlang