2011-01-28 6 views
4

Итак, я пишу программу Erlang, и у меня есть сообщение в виде строки, входящей через сокет.Проблема соответствия шаблону 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

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

У меня есть чувство, что я может идти об этом полностью неправильно, но я не уверен, что еще попробовать ...

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

EDIT : Хорошо, неважно! Замена "true->" на "_->" заставляет его работать просто отлично -_- глупо меня!

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

Приветствия снова :)

+1

Как вы имеете в виду лучший способ? Проверить структуру? В этом случае использование соответствия шаблонов - путь. Независимо от того, выполняете ли вы его с помощью «case» или отдельной функции, зависит от того, что подходит лучше всего. Или ты думал о чем-то другом? – rvirding

ответ

3

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

P.S. oops, вы видели слишком поздно.

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

f([X1, 32, Y1, 13, 10]) -> 
    ...; 
f(_) -> 
    ok. 
Смежные вопросы