从矢量匹配模式

mhl*_*mhl 3 match rust

假设我有这个功能:

match symbol {
      letter @ 'a'..'z' => Token { ... },
      digit @ '0'..'9' => Token { ... },
      whitespace @ ['\r', '\t', '\n'] => Token {...}
}
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.有没有办法whitespace使用类似的构造,而不是像这样写:

match symbol {
  letter @ 'a'..'z' => Token { ... },
  digit @ '0'..'9' => Token { ... },
  '\r' => Token {...},
  '\n' => Token {...},
  '\r' => Token {...},
}
Run Code Online (Sandbox Code Playgroud)

Arj*_*jan 6

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

match symbol {
      letter @ 'a'..'z' => Token { ... },
      digit @ '0'..'9' => Token { ... },
      '\r' | '\t' | '\n' => Token {...}
}
Run Code Online (Sandbox Code Playgroud)

但绑定匹配变量是丑陋的:

match symbol {
      letter @ 'a'..'z' => Token { ... },
      digit @ '0'..'9' => Token { ... },
      ws @ '\r' | ws @ '\t' | ws @ '\n' => Token {...}
}
Run Code Online (Sandbox Code Playgroud)