【问题标题】:Why is this variable unused?为什么这个变量没有被使用?
【发布时间】:2020-04-08 10:15:51
【问题描述】:

为什么要编译这段代码:

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

并返回错误的结果:full Self。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    这是因为发生在生成器的 LHS 上的变量,这里的 X 和 Y,对于理解来说始终是新的未绑定变量本地。这意味着它们与三元组头部的 X 和 Y 不是同一个变量,因此不存在隐式相等测试。这类似于 funs,其中出现在 fun 头部的所有变量也是 fun 本地的新变量。

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

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

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

    【讨论】:

    • 很好地解释了作用域在 Erlang 中的工作原理。和辉煌的列表-理解-忍者
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多