为什么要编译此代码:

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

并返回错误的结果:完整的自我。

最佳答案

这是因为在生成器的LHS上出现的变量X和Y始终是理解范围内的新的未绑定(bind)变量。这意味着它们与三元组开头的X和Y变量不同,因此,没有隐式相等性检验。这类似于乐趣,其中出现在乐趣开头的所有变量都是该乐趣的局部新变量。

这与大多数erlang的其他地方不同,这就是为什么编译器不仅警告未使用头部的X和Y,而且警告理解中的X和Y遮盖了其他变量。它们在理解中的任何地方也都未使用。

一种简单的方法来获得您想要的是:

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

关于erlang - 为什么未使用此变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1277867/

10-10 10:52