==> Scala 有一个强大的模式匹配机制, 类似于 switch 语句,可以实现对类型的判断以及检查,还提供了样本类,使其可以对样本类的对象进行模式匹配
==> 模式匹配示例
1
2
3
4
5
6
7
8
9
10
|
var
v
1
=
0
var
ch
1
=
"-"
ch
1
match
{
case
"+"
=
> v
1
=
1
case
"-"
=
> v
1
=
-
1
case
_
=
> v
1
=
0
}
println(v
1
)
|
==> Scala 守卫
1
2
3
4
5
6
7
8
9
10
|
// Scala 守卫 匹配某种类型的所有值
var
v
2
=
'6'
var
ch
2
:
Int
=
-
1
v
2
match
{
case
'+'
=
> println(
"这是一个+"
)
case
'-'
=
> println(
"这是一个 -"
)
case
_
if
Character.isDigit(v
2
)
=
> ch
2
=
Character.digit(ch
2
,
10
)
case
_
=
> println(
"其它类型"
)
}
println(
"ch2:"
+ ch
2
)
|
==> 模式匹配中的变量
1
2
3
4
5
6
7
|
// 模式中匹配变量
var
v
3
=
"Hello"
v
3
(
1
)
match
{
case
'+'
=
> println(
"这是一个 + "
)
case
'-'
=
> println(
"这是一个 -"
)
case
ch
=
> println(
"这是"
+ ch)
}
|
==> 模式匹配中的数组和列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 匹配数组和列表
var
myarray
=
Array(
1
,
2
,
3
)
myarray
match
{
case
Array(
0
)
=
> println(
"0"
)
case
Array(x, y)
=
> println(
"这是列表,包含两个元素,和是: "
+ (x+y))
case
Array(x, y, z)
=
> println(
"包含三个元素,乘积是: "
+ (x*y*z))
case
Array(x,
_
*)
=
> println(
"这是一个数组"
)
}
var
mylist
=
List(
1
,
2
,
3
,
4
)
mylist
match
{
case
List(
0
)
=
> println(
"0"
)
case
List(x, y)
=
> println(
"这是两个元素,乘积是:"
+ (x+y))
case
List(x, y, z)
=
> println(
"这是一个三个元素的数组,乘积是: "
+ (x*y*z))
case
List(
_
*)
=
> println(
"这是一个多元素数组"
)
}
|
==> 样本类(CaseClass) 在类前面加 case 关键字, 其最大的好处就是 支持模式识别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 通过使用样本类判断对象是否属于类
var
aCar
:
DemoCaseClass
=
new
Bicycle(
"car"
)
aCar
match
{
case
Car(name)
=
> println(
"I am a car"
)
case
Bicycle(name)
=
> println(
"i am a zixingche|"
)
case
_
=
> println(
"other"
)
}
class
DemoCaseClass
case
class
Car(name
:
String)
extends
DemoCaseClass
case
class
Bicycle(name
:
String)
extends
DemoCaseClass
|
本文转自 tianshuai369 51CTO博客,原文链接:http://blog.51cto.com/songqinglong/2072119