大数据系列修炼-Scala课程31

大数据系列修炼-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.
如有问题,欢迎留言指正!

你可能感兴趣的:(scala,大数据)