Reputation: 705
Let's say I'm having this function:
match symbol {
letter @ 'a'..'z' => Token { ... },
digit @ '0'..'9' => Token { ... },
whitespace @ ['\r', '\t', '\n'] => Token {...}
}
This obviously doesn't work. Is there any way to have whitespace
use similar construct, without writing this like:
match symbol {
letter @ 'a'..'z' => Token { ... },
digit @ '0'..'9' => Token { ... },
'\r' => Token {...},
'\n' => Token {...},
'\r' => Token {...},
}
Upvotes: 3
Views: 794
Reputation: 21465
You can combine patterns using the pipe (|
) operator:
match symbol {
letter @ 'a'..'z' => Token { ... },
digit @ '0'..'9' => Token { ... },
'\r' | '\t' | '\n' => Token {...}
}
But binding match to a variable is ugly:
match symbol {
letter @ 'a'..'z' => Token { ... },
digit @ '0'..'9' => Token { ... },
ws @ '\r' | ws @ '\t' | ws @ '\n' => Token {...}
}
Upvotes: 6