如果一个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
原文:http://lqding.blog.51cto.com/9123978/1741944