模式匹配case class

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匹配

   Scalacase class使得对对象进行模式匹配变得非常方便,简单的来说,Scalacase 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...

猜你喜欢

转载自see-you-again.iteye.com/blog/2370665
今日推荐