大資料系列修煉-Scala課程31

安靜的技術控發表於2016-09-17

大資料系列修煉-Scala課程31


核心內容:
1、Option使用內部實戰
2、Option中的sealed關鍵字解析


1、Option使用內部實戰

1>在Option中有兩個具體實現的子類:
cass class Some:若在Option當中含有具體的數值,用Some來表示,
case object None:若Option當中沒有相應的數值,就用None來表示.


例項程式:

object App8
{
    def main(args:Array[String]):Unit=
    {
       val map = Map("zhang"->88.8,"lisi"->98.8)
       map.foreach(println)
       for(ele<-map)   println(ele)
       println("----------------------")
       //獲取資訊中的鍵值
       for((key,_)<-map) println(key)
       //獲取資訊中的value值
       println("----------------------")
       for((_,value)<-map)  println(value)  
       //獲取具體的資訊值
       println(map.get("zhang"))
       println(map.get("li"))
       //進行具體的模式匹配
       println("----------------------")
       map.get("zhang") match
       {
         case Some(value) => println("value is :" + value) 
         case None => println("nothing")
       }
       //在函式中的具體應用
       println("----------------------")
       def fun(infor:Any) = infor match   //scala中的Any是一切型別的父類
       {
         case Some(value) => println("value is :" + value) 
         case None => println("nothing")
       }
       fun(map.get("zhang"))
       fun(map.get("li"))
    }  
}

執行結果:

(zhang,88.8)
(lisi,98.8)
(zhang,88.8)
(lisi,98.8)
----------------------
zhang
lisi
----------------------
88.8
98.8
Some(88.8)
None
----------------------
value is :88.8
----------------------
value is :88.8
nothing
2、Option中sealed關鍵字的含義

1>如果在定義Option(Persion)的時候使用sealed關鍵字,那麼Option下面定義的所有case class和case object都必須在
同一個檔案中,即同一個包中,這樣做的好處是在用Option的具體子類case class和case object在進行模式匹配的時候,編譯器
會幫我們檢查所有的匹配項是否都已經在case列表中,不然的話將報出相應的警告.


例項程式:

sealed abstract class Persion {}
case  class Student(age:Int) extends Persion
case  class Worker(age:Int,salary:Double,item:Persion*) extends Persion

object App 
{
   def main(args:Array[String]):Unit=   
   {  
       //模式匹配在具體函式中的應用
       def fun(persion:Persion) = persion match   //&1
       {
         case Student(age) => println("age:"+"\t"+age)
         //沒有列出case Worker 
         //case Worker(_,_,student @ Student(age),_*) => println("age:"+"\t"+student.age)
       }
       //測試模式匹配的具體應用
       fun(Student(15))
       fun(Worker(15,200.0,Student(20)))
   }
}

在上面的程式中,因為使用了sealed關鍵字,&1處將報出警告:match may not be exhaustive.
如有問題,歡迎留言指正!

相關文章