假设我有这个功能:
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 {...},
}
答案 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 {...}
}