6

我最近开始使用 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.

编译器警告我,在函数的第 3 种情况下,未使用 Head。没有Head怎么写函数?

4

3 回答 3

10

如果您命名一个变量_而不是Name(例如_,代替Head)该变量将不会被绑定,并且您不会收到警告。

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

_Head建议保留变量的名称以提高代码的可读性(例如,比仅仅猜测它的用途更容易_)。

于 2008-12-14T19:39:28.857 回答
9

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

max(Element,[_Head | Tail]) ->
   max(Element, Tail);
于 2008-12-06T02:45:19.217 回答
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.

应该做的伎俩。原因是将 'Head' 替换为 '_' 是表示参数将被放置在那里的语法,但我不需要它。

于 2008-12-06T02:47:32.317 回答