Erlang 为什么这个变量未被使用?

Erlang 为什么这个变量未被使用?,erlang,Erlang,为什么编译此代码: triples( [], _,_,_)-> []; triples( Self, X, Y, none )-> [ Result || Result = { X, Y, _} <- Self ]. 并返回错误的结果:完全自我。这是因为发生在生成器LHS上的变量,这里的X和Y,总是理解的局部新的未绑定变量。这意味着它们与三元组头部的X和Y变量不同,因此,不存在隐式等式检验。这与funs类似,在funs中,发生在fun头部的所有变量也是fun的局部新

为什么编译此代码:

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

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

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

这是因为发生在生成器LHS上的变量,这里的X和Y,总是理解的局部新的未绑定变量。这意味着它们与三元组头部的X和Y变量不同,因此,不存在隐式等式检验。这与funs类似,在funs中,发生在fun头部的所有变量也是fun的局部新变量

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

获得您想要的东西的简单方法是:

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

[Result | | Result={X1,Y1,{u}关于作用域如何在Erlang中工作的精彩解释。以及精彩的忍者列表
[ Result || Result = {X1,Y1,_} <- Self, X =:= X1, Y =:= Y1 ]