==> 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