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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第30讲:模式匹配高级实战:嵌套的Case class相关的知识,希望对你有一定的参考价值。

如果一个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的主要内容,如果未能解决你的问题,请参考以下文章

Python 高级教程之结构化模式匹配

Hadoop应用实战100讲-Hadoop分布式文件系统

scala 模式匹配

Scala总结之模式匹配

七Shell脚本高级编程实战第七部

第28讲:Scala提取器Extractor实战详解