13.13 匹配嵌套结构

样例类经常被用作嵌套结构.

例如: 某商场售卖货物, 经常把商品捆绑在一起进行打折销售.

案例:

  1. 现在有一些商品,请使用 Scala 设计相关的样例类,完成商品可以捆绑打折出售。

  2. 要求商品捆绑可以是单个商品,也可以是多个商品。

  3. 打折时按照折扣xx元进行设计.

  4. 能够统计出所有捆绑商品打折后的最终价格

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
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-06 22:13:15

results matching ""

    No results matching ""