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

来源:互联网 发布:淘宝首页模板制作 编辑:程序博客网 时间:2024/05/17 06:57

大数据系列修炼-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)----------------------zhanglisi----------------------88.898.8Some(88.8)None----------------------value is :88.8----------------------value is :88.8nothing
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 Persioncase  class Worker(age:Int,salary:Double,item:Persion*) extends Persionobject 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.
如有问题,欢迎留言指正!

1 0