match表达式
// 正则匹配
val pattern = "([0-9]+) ([a-z]+)".r;
"741258933 hadoop" match {
case pattern(num,item) => println(num+":"+item)
}
输出结果:741258933:hadoop
数组匹配
def match_array(arr:Any) = arr match{
case Array(0) => println("Array:0" )
case Array(x,y) => println("Array:x="+x+",y="+y )
case Array(0,_*) => println("Array:..." )
case _ => println("something else" )
}
match_array(Array(0))
match_array(Array(0,1))
match_array(Array(0,1,2,3,4,5))
match_array(Array("one","two","three"))
输出结果:
Array:0
Array:x=0,y=1
Array:...
somethingelse
case class匹配
Scala的case class使得对对象进行模式匹配变得非常方便,简单的来说,Scala的case class就是在普通的类定义前加case这个关键字,然后你可以对这些类来模式匹配。
abstract class Person
case class Student(age:Int) extends Person
case class Worker(age:Int,salary:Double) extends Person
case object Shared extends Person
/**
* 1、声明case class 每个成员都会默认生成val,如age:Int
* 2、每个case class 都会有伴生对象,每个伴生对象都会有自己case class的具体对象
* 3、模式匹配的时候,可以从case class提取内容,提取方法从apply中。
*/
object case_class_object {
def main(args: Array[String]): Unit = {
def caseOps(person:Person) = person match{
case Student(age) => println("I am " + age + " years old");
case Worker(_,salary) => println("Wow,I got "+salary)
case Shared => println("no property...");
}
caseOps(Student(19))
caseOps(Worker(19,4000))
caseOps(Shared)
val worker = Worker(29,3000);
val worker2 = worker.copy(salary = 5000);
val worker3 = worker.copy(age = 31);
}
}
输出结果:
Iam 19 years old
Wow,Igot 4000.0
noproperty...