您的位置:首页 > 大数据

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

2016-09-16 13:28 411 查看
大数据系列修炼-Scala课程30

核心内容:

1、模式匹配高级实战:嵌套的case class

1、模式匹配高级实战:嵌套的case class
1、在模式匹配中使用嵌套case class的原因:

1>因为我们的case class一般只能表述一个item,在我们进行模式匹配的过程中,当我们想表述某一类item的集合的时候,就需要

嵌套的case class

2、在模式匹配使用嵌套case class的过程中,item:Persion*的含义:

1>item表示Persion类型的成员

2>* 表示Persion类型的成员可以有多个

3、在模式匹配与嵌套的case class结合的过程当中,我们可以使用变量@的方式来引用当前匹配到的对象.

实例程序:

package IT03

//本程序主要是为了测试嵌套的case class和模式匹配的应用

abstract class Item {}  //定义了一个抽象类
case  class Book(description:String,price:Double) extends Item  //定义了一个case class继承了Item
case  class Bundle(description:String,price:Double,item:Item*) extends Item  //定义了一个case Bundle继承了Item

//抽象类通常情况下是作为一个类族的最顶层的父类
abstract class Persion{}
case class Student(age:Int) extends Persion{}   //定义了一个case class 继承了Persion
case class Worker(age:Int,salary:Double,item:Persion*)  extends Persion //定义了一个case class 继承了Persion

//本节的知识类似于Java中的多态
object App8
{
def main(args:Array[String]):Unit=
{
def fun1(item:Item) = item match
{
case  Book(_,price) => println("price is:" +"\t"+ price)
case  Bundle(description,price,_*) => println("desc is:" + description + "price is:" + price)
case _ => println("OK!")
}

fun1(Book.apply("spark", 200.0))
fun1(Bundle.apply("spark",200.0, Book.apply("hadoop", 300.0)))   //在这里面嵌套了Book类型

println("--------------------")

def fun2(persion:Persion) = persion match
{
case Student(age) => println("age is:" + age)
case Worker(age,salary,aa @ Student(_)) => println(aa.age)  //在模式匹配中使用@引用指向一个对象
}

fun2(Student(20))
fun2(Worker(20,200.0,Student(40)))
}
}


运行结果:

price is:   200.0
desc is:sparkprice is:200.0
--------------------
age is:20
40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: