首页 > 其他 > 详细

第30讲:模式匹配高级实战:嵌套的Case class

时间:2016-02-14 22:22:51      阅读:233      评论:0      收藏:0      [点我收藏+]

如果一个case class 其构造函数的参数又是另一个case class,那么我们如果使用模式匹配呢?

请看下面的例子

package com.dt.scala.pattern_match

abstract class Item
case class Book(Description: String,Price: Double) extends Item
case class Bundle(Description: String,Price: Double,item: Item*) extends Item


object CaseClassNested {
  def main(args: Array[String]): Unit = {
    def caseClaseNestedMatch(item: Item) = item match {
      case Bundle(x,y,Book(desc,price)) => {
        println("Bundle‘s description:"+x)
        println("Bundle‘s price:"+y)
        println("Bundle‘s Book description:"+desc)
      }
      case Bundle(x,y,first @Book(_,_),rest @ _*) => {
        println("Bundle‘s description:"+x)
        println("Bundle‘s price:"+y)
        println("Bundle‘s first Book description:"+first.Description)
      }
    }
    caseClaseNestedMatch(Bundle("one book",49,Book("Spark in action",49)))
    caseClaseNestedMatch(Bundle("two book",100,Book("Hadoop in action",50),Book("Spark",50)))
  }
}


Book是一个case class 而Bundle的参数也可以有多个Book类 。

如果想匹配Book内的参数,可以使用类似Book(x,y)来进行模式匹配。如果想匹配整个Book类,那么使用first @ Book(_,_) 来匹配。first是常量名称,可以随意定义。@ 后面是类的名称。 


本文出自 “叮咚” 博客,请务必保留此出处http://lqding.blog.51cto.com/9123978/1741944

第30讲:模式匹配高级实战:嵌套的Case class

原文:http://lqding.blog.51cto.com/9123978/1741944

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!