从矢量匹配模式

时间:2014-01-29 09:31:04

标签: match rust

假设我有这个功能:

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 {...},
}

1 个答案:

答案 0 :(得分:6)

您可以使用管道(|)运算符组合模式:

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 {...}
}