2014-01-29 1 views
3

Допустим, у меня эту функцию:
Match шаблон из вектора

match symbol { 
     letter @ 'a'..'z' => Token { ... }, 
     digit @ '0'..'9' => Token { ... }, 
     whitespace @ ['\r', '\t', '\n'] => Token {...} 
} 

Это, очевидно, не работает. Есть ли способ иметь whitespace использовать подобную конструкцию, не написав это, как:

match symbol { 
    letter @ 'a'..'z' => Token { ... }, 
    digit @ '0'..'9' => Token { ... }, 
    '\r' => Token {...}, 
    '\n' => Token {...}, 
    '\r' => Token {...}, 
} 
+5

Вам теоретически не нужны переменные 'letter',' digit' и 'whitespace' для чего-либо другого tha n, так как символ «все еще используется» в руках. – huon

ответ

4

Вы можете комбинировать шаблоны, используя трубы (|) Оператор:

match symbol { 
     letter @ 'a'..'z' => Token { ... }, 
     digit @ '0'..'9' => Token { ... }, 
     '\r' | '\t' | '\n' => Token {...} 
} 

Но связывание матч с переменной является уродливым:

match symbol { 
     letter @ 'a'..'z' => Token { ... }, 
     digit @ '0'..'9' => Token { ... }, 
     ws @ '\r' | ws @ '\t' | ws @ '\n' => Token {...} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^