package aa.bb
object MatchDemo {
def method1(x:Int):String={
if(x==1){
"one"
}else if(x==2){
"two"
}else{
"many"
}
}
def method2:PartialFunction[Int,String]={
case 1=>"one"
case 2=>"two"
case _=>"many"
}
// 模式匹配
def match1(x:Int):String={
x match{
case 1=>"one"
case 2=>"two"
case _=>"many"
}
}
def match2(x:Any):Unit={
x match {
case 1=>println("x为1")
case x:Int=>println("x为整型")
case s:String=>println("字符串,值为"+s)
case d:Double=>println("Double类型,值为"+d)
case _=>println("不知道")
}
}
case class Teacher(name:String,age:Int)
def match3(teacher: Teacher):Unit={
teacher match {
case Teacher("wjj", age)=>println("hello wjj ago is "+age)
case Teacher("kb15", 4)=>println("kb15学习已经两个月了")
case Teacher(name, 32)=>println("名字为"+name+" age is 32")
}
}
// level A B C D 如果 name="bolo" 输出特殊学生
def match4(level:String,name:String):Unit={
level match {
case "A"=>println("优秀")
case "B"=>println("良好")
case "C" if name=="zs"=>println("zs!")
case "C"=>println("合格")
case _ if name=="bolo" =>println("特殊学生")
// case _ if(name=="bolo")=>println("特殊学生")
case _=>println("不及格")
}
}
def match5(e:Exception):Unit={
e match {
case e1:IndexOutOfBoundsException=>println("IndexOutOfBoundsException")
case e2:NullPointerException=>println("NullPointerException")
case e3:RuntimeException=>println("RuntimeException")
case e4:Exception=>println("Exception")
}
}
def match6(arr:Array[String]):Unit={
arr match {
case Array("KB15")=>println("kb15 array")
case Array(str1,str2)=>println(str1,str2)
case Array("KB15",_*)=>println("KB15开头")
case Array(str1,str2,"KB18",_*)=>{
val length = arr.length
for(i<-0 until(length)){
println(arr(i))
}
println("第三个为KB18")
}
}
}
class Person
case class Worker(name:String,age:Int) extends Person
case class Student(name:String,age:Int) extends Person
case class GongWuYuan(name:String,age:Int) extends Person
def match7(person: Person):Unit={
person match {
case Worker(name,age) if age<25=>println("刚进入社会 ,参加工作不久")
case Worker(name,age)=>println("共产主义建设者")
case Student(name,age) if name=="小学生" && age<13 =>println("祖国的花朵")
case Student(name,age)=>println("学生")
case gwy:GongWuYuan if gwy.name=="干部"=>println("人民的好公仆")
case GongWuYuan(name,age)=>println("人民的公仆")
case _=>println("其他人")
}
}
def main(args: Array[String]): Unit = {
match7(GongWuYuan("干部",11))
println("------------------------------------")
match6(Array("KB11","KU11","KB18","KJ33"))
println("------------------------------------")
match5(new NullPointerException)
println("------------------------------------")
match4("C","zs")
println("------------------------------------")
match3(Teacher("zjh",32))
println("------------------------------------")
match2(3.11d)
println("------------------------------------")
println(match1(2))
println("------------------------------------")
println(method2(3))
println("------------------------------------")
println(method1(1))
}
}
输出
人民的好公仆
------------------------------------
KB11
KU11
KB18
KJ33
第三个为KB18
------------------------------------
NullPointerException
------------------------------------
zs!
------------------------------------
名字为zjh age is 32
------------------------------------
Double类型,值为3.11
------------------------------------
two
------------------------------------
many
------------------------------------
one