mhl
mhl

Reputation: 705

Match pattern from vector

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

Answers (1)

Arjan
Arjan

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

Related Questions