3.11. Using Pattern Matching in Match Expressions
Problem
You need to match one or more patterns in a match expression, and the pattern may be a constant pattern, variable pattern, constructor pattern, sequence pattern, tuple pattern, or type pattern.
Solution
Define a case
statement for
each pattern you want to match. The following method shows examples of
many different types of patterns you can use in match
expressions:
def
echoWhatYouGaveMe
(
x
:
Any
)
:
String
=
x
match
{
// constant patterns
case
0
=>
"zero"
case
true
=>
"true"
case
"hello"
=>
"you said 'hello'"
case
Nil
=>
"an empty List"
// sequence patterns
case
List
(
0
,
_
,
_
)
=>
"a three-element list with 0 as the first element"
case
List
(
1
,
_
*)
=>
"a list beginning with 1, having any number of elements"
case
Vector
(
1
,
_
*)
=>
"a vector starting with 1, having any number of elements"
// tuples
case
(
a
,
b
)
=>
s
"got $a and $b"
case
(
a
,
b
,
c
)
=>
s
"got $a, $b, and $c"
// constructor patterns
case
Person
(
first
,
"Alexander"
)
=>
s
"found an Alexander, first name = $first"
case
Dog
(
"Suka"
)
=>
"found a dog named Suka"
// typed patterns
case
s
:
String
=>
s
"you gave me this string: $s"
case
i
:
Int
=>
s
"thanks for the int: $i"
case
f
:
Float
=>
s
"thanks for the float: $f"
case
a
:
Array
[
Int
]
=>
s
"an array of int: ${a.mkString("
,
")}"
case
as
:
Array
[
String
]
=>
s
"an array of strings: ${as.mkString("
,
")}"
case
d
:
Dog
=>
s
"dog: ${d.name}"
case
list
:
List
[
_
]
=>
s
"thanks for the List: $list"
case
m
:
Map
[
_
,_
]
=>
m
.
toString
// the default wildcard pattern ...
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.