13.13 匹配嵌套结构
样例类经常被用作嵌套结构.
例如: 某商场售卖货物, 经常把商品捆绑在一起进行打折销售.
案例:
现在有一些商品,请使用 Scala 设计相关的样例类,完成商品可以捆绑打折出售。
要求商品捆绑可以是单个商品,也可以是多个商品。
打折时按照折扣xx元进行设计.
能够统计出所有捆绑商品打折后的最终价格
package com.atguigu.day11.moshipipei
object MatchNest {
def main(args: Array[String]): Unit = {
val book1 = Book("九阳真经", 100)
val book2 = Book("葵花宝典", 120)
val bundle1 = Bundle("书籍", 20, book1, book2)
println(price2(book1))
println(price2(book2))
println(price2(bundle1))
}
/**
* 计算打包的销售的书的价格
*
* 方式1:
*/
def price(item: Item): Double = {
val money = item match {
case Book(_, price) => price
case Bundle(_, discount, items@_*) => {
var sum = -discount
for (elem <- items) {
sum += price(elem)
}
sum
}
case _ => 0
}
money
}
// 方式2
def price2(item: Item): Double = {
item match {
case Book(_, price) => price
case Bundle(_, discount, items@_*) => {
// 不用循环
// 把每本书的价格映射到新的序列中, 然后再求和
items.map(price2).sum - discount
}
case _ => 0
}
}
}
// 抽象类
abstract class Item
// 样式类 Book
case class Book(description: String, price: Double) extends Item
// 捆绑的样式类
case class Bundle(description: String, discount: Double, item: Item*) extends Item