第30讲:模式匹配高级实战:嵌套的Case class

如果一个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是常量名称,可以随意定义。@ 后面是类的名称。

时间: 2024-10-25 01:21:41

第30讲:模式匹配高级实战:嵌套的Case class的相关文章

模式匹配高级实战:嵌套的Case class之Scala学习笔记-21

package com.leegh.pattern_match /** * @author Guohui Li */ abstract class Itemcase class Book(description: String,price: Double) extends Itemcase class Bundle(description: String,price: Double,items:Item*) extends Itemobject Pattern_Match_Case_Class_

ExtJS视频教程 ExtJS实战教程完整版30讲

本教程由齐学网整理提供,更多好资源尽在齐学网! ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架.        其功能丰富,无人能出其右.        无论是界面之美,还是功能之强,ext的表格控件都高居榜首.单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现.自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能.再加上可编辑g

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

Django高级实战 开发企业级问答网站

第1章 Django高级实战-开发企业级问答网站课程项目结合:需求分析/Django高级用法/算法/设计模式/TestCase测试/云计算服务.本章将具体介绍课程的学习内容和目标,描述问答网站的业务场景.用途.重要性.实用性.学习本课程需要具备的知识,项目使用的技术栈,重难点:让同学们对课程的技术范畴,广度和难度有心理准备.演示网站的所有功能,结果导向,一目了然.... 第2章 Django项目的一些最佳实践最佳实践目的是使生产或管理实践的结果达到最优,并减少出错的可能性.本章讲的一些实践方法在

2017马哥python高级实战班培训推荐

2017马哥python高级实战班,培训推荐的优惠渠道 链接地址: http://blog.sina.com.cn/s/blog_1706603600102wxm6.html

XSS高级实战教程

1.[yueyan科普系列]XSS跨站脚本攻击--yueyan 2.存储型XSS的成因及挖掘方法--pkav 3.跨站脚本攻击实例解析--泉哥 4.XSS高级实战教程--心伤的瘦子 5.XSS利用与挖掘-更新版--GAINOVER 6.XSS教学--gainover XSS教学 XSS实战教程 PKAV培训网站:http://edu.pkav.net/

玩转AE之cc2015从基础到高级实战视频教程

课程目标:帮助大家更快,更加高效的学习 适合人群:零基础以及需要进阶学习的同学 课程介绍: 本套教学34小时全面学习ae基础到高级的实战的课程,课程采用2015版本的ae来进行教学,附带软件下载地址以及安装教程,适合零基础以及需要进阶学习的同学.提供的有全套的素材和插进,方便大家下载安装学习. 详见:玩转AE之cc2015从基础到高级http://www.kokojia.com/course-3443.html 更多内容详见: 玩转AE之cc2015从基础到高级实战视频教程http://www.

《梁宁产品思维30讲》学习分享

梁宁产品思维30讲 春节之后,有一位朋友告诉我自己在做"个人产品研发",我不解,他解释说,个人想要实现跃迁,就要有属于自己的产品,他想做一个小联盟,大家互帮互助.联机学习,快速研发个人产品,想听听我的看法,我当然是觉得想法很好,但自己对做产品还理解不深,于是立马突击学习,找到了早已购买的产品思维课程,之后我不但提了建议,还由此想到了一个新点子,文末发布.现在先分享这一课程的精华内容. 这是得到app的开年大课,请来了腾讯的产品经理--梁宁女士.话不多说,产品经理用产品说话,好的内容自带

2019刘老师教你用springboot2.x开发整合微信支付的线上教育平台带源码送springboot2.x零基础入门到高级实战教程

第一部分:springboot2.x零基础入门到高级实战教程一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4