Functional programming 关于Erlang中未使用变量的警告
我最近启动了Erlang,我注意到我在编译时不断收到“警告:变量X未使用”。例如,使用以下函数查找列表中的最大元素:Functional programming 关于Erlang中未使用变量的警告,functional-programming,erlang,Functional Programming,Erlang,我最近启动了Erlang,我注意到我在编译时不断收到“警告:变量X未使用”。例如,使用以下函数查找列表中的最大元素: max([Head|Tail]) -> max(Head,Tail). max(Element,[Head | Tail]) when Element < Head -> max(Head,Tail); max(Element,[Head | Tail]) -> max(Element,
max([Head|Tail]) ->
max(Head,Tail).
max(Element,[Head | Tail]) when Element < Head ->
max(Head,Tail);
max(Element,[Head | Tail]) ->
max(Element, Tail);
max(Element,[]) ->
Element.
max([Head | Tail])->
最大值(头、尾)。
当元素
最大值(头、尾);
最大值(元素[Head | Tail])->
最大值(元素,尾部);
最大值(元素,[])->
元素。
编译器警告我,在函数的第三种情况下,Head未使用。如何在没有Head的情况下编写函数?这将抑制警告,而不会造成混淆:
max(Element,[_Head | Tail]) ->
max(Element, Tail);
max([Head | Tail])->
最大值(头、尾)。
当元素
最大值(头、尾);
最大值(元素,[|尾])->
最大值(元素,尾部);
最大值(元素,[])->
元素。
我们应该做到这一点。原因是,将“Head”替换为“\u”是表示参数将被放置在那里的语法,但我不需要它。如果您将变量命名为
\u
,而不是
(例如\ucode>而不是Head
),则变量将不会被绑定,并且您不会收到警告
如果您将变量命名为\u name
而不是name
(例如\u Head
而不是Head
),变量将被绑定,但您仍然不会收到警告。在代码中引用以开头的变量被认为是非常糟糕的做法
建议保留变量的名称以提高代码的可读性(例如,猜测\u Head
的目的比猜测\u
更容易)。您的最后两句话相互矛盾。我怀疑在这种情况下,“使用”意味着“使用绑定到的值”,而不是“使用名称结构”。使用“使用变量”是指在代码中引用它,“使用变量名”是指给它命名。
max([Head|Tail]) ->
max(Head,Tail).
max(Element,[Head | Tail]) when Element < Head ->
max(Head,Tail);
max(Element,[_| Tail]) ->
max(Element, Tail);
max(Element,[]) ->
Element.