Erlang Pattern Matching Problem - PullRequest
       12

Erlang Pattern Matching Problem

4 голосов
/ 28 января 2011

Итак, я пишу программу на Erlang, и у меня есть сообщение в виде строки, поступающей через сокет.

Мне нужно проверить, чтобы убедиться, что сообщение имеет формат: [Integer, Space, Integer, "\ r \ n"] например «1 3 \ r \ n», а затем делать что-либо, только если сообщение соответствует этому формату.

Я пытался

 case Move of
     [X1, 32 ,Y1,13,10]->
         %do stuff....  
    true-> 
       %don't do stuff...  
    end 

Работает нормально, если сообщение верное, но кажется, что оно вылетает, если сообщение не совпадает.

У меня такое чувство, что я могу поступить совершенно неправильно, но я не уверен, что еще можно попробовать ...

Приветствует любую помощь или совет =]

РЕДАКТИРОВАТЬ: ОК не важно! Замена "true->" на "_->" заставляет его работать просто отлично - глупая я!

Мне все равно было бы интересно узнать, является ли это наилучшим способом решения этой проблемы или же существует более эффективный способ.

Ура снова :)

1 Ответ

3 голосов
/ 29 января 2011

вместо true вы должны использовать _ - подстановочный знак, который соответствует чему-либо

PS К сожалению, ваше редактирование слишком поздно.

ответ на ваш второй вопрос будет - используйте функции вместо случаев:

f([X1, 32, Y1, 13, 10]) ->
  ...;
f(_) ->
  ok.
...