您的位置:首页 > 大数据

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

2016-09-17 10:35 260 查看
大数据系列修炼-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.

如有问题,欢迎留言指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: