Erlang определить в случае .. of

У меня есть 2 определения:

-define(LOGIN_PACKET, 1).
-define(LOGOUT_PACKET, 2).

Попытка:

case func(...) of
   LOGIN_PACKET ->
               .....;
   LOGOUT_PACKET ->
               ......
end

Но я получаю предупреждение:

это предложение не может совпадать, потому что всегда совпадает предыдущее предложение в строке 209.

Почему? Можем ли мы использовать определения в случае с Erlang.

Спасибо.


person 0xAX    schedule 25.04.2011    source источник


Ответы (1)


Сделайте это, как показано ниже

case func(...) of
   ?LOGIN_PACKET ->
               .....;
   ?LOGOUT_PACKET ->
               ......
end

person Arunmu    schedule 25.04.2011
comment
Вы всегда должны добавлять к имени макроса префикс ?, чтобы расширить его. - person rvirding; 26.04.2011
comment
Да. Я всегда использовал его для расширения. :) - person Arunmu; 26.04.2011
comment
Я просто комментировал, ПОЧЕМУ вы ставите перед макросом префикс ?, чтобы расширить его. Если бы вам удалось расширить макрос без префикса ?, я был бы впечатлен. :-) - person rvirding; 27.04.2011
comment
Я не думаю, что это возможно, поскольку компилятору erlang нужен '?' чтобы развернуть макрос. - person Arunmu; 27.04.2011