Предупреждения о неиспользуемых переменных в Erlang - PullRequest
6 голосов
/ 06 декабря 2008

Я недавно запустил 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?

Ответы [ 3 ]

9 голосов
/ 14 декабря 2008

Если вы назовете переменную _ вместо Name (например, _ вместо Head), переменная не будет связана, и вы не получите предупреждение.

Если вы назовете переменную _Name вместо Name (например, _Head вместо Head), переменная будет привязана, но вы все равно не получите предупреждение. Ссылка на переменную, начинающуюся с _ в коде, считается очень плохой практикой.

Рекомендуется сохранить имя переменной, чтобы улучшить читабельность кода (например, легче угадать, для чего _Head предназначался, чем просто _).

9 голосов
/ 06 декабря 2008

Это должно подавить предупреждение, не путая:

max(Element,[_Head | Tail]) ->
   max(Element, Tail);
6 голосов
/ 06 декабря 2008
    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' на '_' является синтаксисом, указывающим, что параметр будет помещен туда, но он мне не нужен.

...