您的位置:首页 > 其它

scala-30:模式匹配高级实战:嵌套的Case class

2015-12-20 14:47 441 查看
内容:

1、嵌套的Case class与模式匹配结合实战解析

2、Case object 实战解析

<span style="white-space:pre">	</span>abstract class Item
<span style="white-space:pre">	</span>case class Book(description: String, price: Double) extends 	Item
<span style="white-space:pre">	</span>case class Bundle(description: String, price: Double, items: 	Item*) extends Item
<span style="white-space:pre">	</span>object Pattern_Match_Case_Class_Nested


Case class Bundle中使用了嵌套case class,items,类型Item*表示有若干个扩展参数或类型,也可以为Book或者Bundle。

case Bundle(_, _, Book(descr, _), _*) => println("The first description is :" + descr)
case _ => println("Oops!")
}
caseclass_nested(Bundle("1111 Special's", 30.0,
<span style="white-space:pre">	</span> Book("Scala for the Spark Developer", 69.95),
<span style="white-space:pre">	</span> Bundle("Hadoop", 40.0,
<span style="white-space:pre">	</span> Book("Hive", 79.95),
<span style="white-space:pre">	</span> Book("HBase", 32.95) )

因为Bundle中嵌套了items类型的Book,所以提取器提取到Book中的descr并将其打印

第二点非常方便:即使用@符号来引用当前匹配到的对象。

<span style="white-space:pre">	</span>case Bundle(_, _, art @ Book(_, _), rest @ _*) => println(art.description + " : " + art.price)


art引用了Book对象的属性,函数体中执行打印的时候,art可以直接调用Book中属性description和price。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: