比如某一系列商品想捆绑打折出售
需求背景故事,当我去亚马逊买一本书,下单在付账前,它又给我推荐其他书籍,这时候我可以直接打钩一起下单购买
1、创建样例类
Item 是条目类
Article 是书籍类
Bundle 推荐书籍类
abstract class Item
case class Article(description: String, price: Double) extends Item
case class Bundle(description: String, discount: Double, item: Item*) extends Item
2、匹配嵌套结构
val sale = Bundle("愚人节大甩卖系列", 10,
Article("《九阴真经》", 40),
Bundle("从出门一条狗到装备全发光的修炼之路系列", 20,
Article("《如何快速捡起地上的装备》", 80),
Article("《名字起得太长躲在树后容易被地方发现》",30)))
3、将descr绑定到第一个Article的描述,打印书名
val result1 = sale match {
case Bundle(_, _, Article(descr, _), _*) => descr
}
println(result1)
4、通过@表示法将嵌套的值绑定到变量。
_*绑定剩余Item到rest
val result2 = sale match {
case Bundle(_, _, art @ Article(_, _), rest @ _*) => (art, rest)
}
println(result2)
5、不使用_*绑定剩余Item到rest
val result3 = sale match {
case Bundle(_, _, art @ Article(_, _), rest) => (art, rest)
}
println(result3)
6、计算某个Item价格的函数,并调用
def begprice(it: Item): Double = {
it match {
case Article(_, p) => p
case Bundle(_, disc, its@_*) => its.map(begprice _).sum - disc
}
}
println(begprice(sale))