3.8. Matching Multiple Conditions with One Case Statement
Problem
You have a situation where several match conditions require that the same business logic be executed, and rather than repeating your business logic for each case, you’d like to use one copy of the business logic for the matching conditions.
Solution
Place the match conditions that invoke the same business logic on
one line, separated by the |
(pipe)
character:
val
i
=
5
i
match
{
case
1
|
3
|
5
|
7
|
9
=>
println
(
"odd"
)
case
2
|
4
|
6
|
8
|
10
=>
println
(
"even"
)
}
This same syntax works with strings and other types. Here’s an
example based on a String
match:
val
cmd
=
"stop"
cmd
match
{
case
"start"
|
"go"
=>
println
(
"starting"
)
case
"stop"
|
"quit"
|
"exit"
=>
println
(
"stopping"
)
case
_
=>
println
(
"doing nothing"
)
}
This example shows how to match multiple case objects:
trait
Command
case
object
Start
extends
Command
case
object
Go
extends
Command
case
object
Stop
extends
Command
case
object
Whoa
extends
Command
def
executeCommand
(
cmd
:
Command
)
=
cmd
match
{
case
Start
|
Go
=>
start
()
case
Stop
|
Whoa
=>
stop
()
}
As demonstrated, the ability to define multiple possible matches for each case statement can simplify your code.
See Also
See Recipe 3.13, for a related approach. |
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.