有关Erlang中未使用变量的警告

Dyl*_*ite 6 erlang functional-programming

我最近启动了Erlang,我注意到编译时我经常收到"警告:变量X未使用".例如,使用以下函数,该函数查找列表中的最大元素:

    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.
Run Code Online (Sandbox Code Playgroud)

编译器警告我,在函数的第三种情况下,Head未使用.如何在没有Head的情况下编写函数?

Dus*_*tin 9

这应该抑制警告而不会混淆:

max(Element,[_Head | Tail]) ->
   max(Element, Tail);
Run Code Online (Sandbox Code Playgroud)


Ada*_*erg 9

如果您命名变量_而不是Name(例如,_而不是Head)变量将不受约束,并且您将不会收到警告.

如果您命名变量_Name而不是Name(例如,_Head而不是Head)变量被绑定,但您仍然不会收到警告.引用以_代码开头的变量被认为是非常糟糕的做法.

建议保留变量的名称以提高代码的可读性(例如,更容易猜出_Head目的是什么而不仅仅是_).


Nic*_*uso 6

    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.
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.将'Head'替换为'_'的原因是说参数将放在那里,但我不需要它.