2021年大数据常用语言Scala(三十五):scala高级用法 提取器(Extractor)
目录
提取器(Extractor)
定义提取器
提取器(Extractor)
我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如:
// 定义样例类
case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTaskval msg1 = SubmitTask("001", "task-001")
val msg2 = HeartBeat(1000)
val msg3 = CheckTimeOutTaskval list = List(msg1, msg2, msg3)list(2) match {// 可以使用模式匹配快速匹配到到SubmitTask样例类中的id和namecase SubmitTask(id, name) => println(s"id=$id, name=$name")case HeartBeat(time) => println(s"time=$time")case CheckTimeOutTask => println("检查超时")
}
那是不是所有的类都可以进行这样的模式匹配呢?答案是不可以的。要支持模式匹配,必须要实现一个提取器。
定义提取器
之前我们学习过了,实现一个类的伴生对象中的apply方法,可以用类名来快速构建一个对象。伴生对象中,还有一个unapply方法。与apply相反,unapply是将该类的对象,拆解为一个个的元素。
要实现一个类的提取器,只需要在该类的伴生对象中实现一个unapply方法即可。
示例:实现一个类的解构器,并使用match表达式进行模式匹配,提取类中的字段。
class Student {var name:String = _ // 姓名var age:Int = _ // 年龄// 实现一个辅助构造器def this(name:String, age:Int) = {this()this.name = namethis.age = age}
}object Student {def apply(name:String, age:Int): Student = new Student(name, age)// 实现一个解构器def unapply(arg: Student): Option[(String, Int)] = Some((arg.name, arg.age))
}object extractor_DEMO {def main(args: Array[String]): Unit = {val zhangsan = Student("张三", 20)zhangsan match {case Student(name, age) => println(s"姓名:$name 年龄:$age")case _ => println("未匹配")}}
}
样例类自动实现了apply、unapply方法(可以使用scalap反编译一个样例类的字节码)
2021年大数据常用语言Scala(三十五):scala高级用法 提取器(Extractor)相关推荐
- 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)
目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...
- 2021年大数据常用语言Scala(三):Scala解释器
目录 scala解释器 启动scala解释器 执行scala代码 退出解释器 scala解释器 后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代 ...
- 2021年大数据常用语言Scala(四):基础语法学习 声明变量
目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量 惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量.那scala语言如何定义变量呢? 语法格 ...
- 2021年大数据常用语言Scala(一):Scala简介
目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...
- 2021年大数据常用语言Scala(十八):基础语法学习 Map对象
目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...
- 2021年大数据常用语言Scala(二):Scala开发环境安装
目录 开发环境安装 安装JDK 安装scala SDK 步骤 具体操作 安装IDEA scala插件 步骤 开发环境安装 学习如何编写scala代码之前,需要先安装scala编译器以及开发工具 sca ...
- 2021年大数据常用语言Scala(十七):基础语法学习 Set
目录 Set 不可变集 可变集 Set Set(集)是代表没有重复元素的集合.Set具备以下性质: 元素不重复 不保证插入顺序 和List正好相反, List: 元素可以重复 保证插入顺序 scala ...
- 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...
- 2021年大数据常用语言Scala(三十六):scala高级用法 泛型
目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...
最新文章
- linux条件判断:常用练习添加用户
- 【Guava】使用Guava的RateLimiter做限流
- 企业建立数据驱动决策该如何做?终于有大神总结全了
- Google 图片下载工具
- 软件开发需要重视对异常的处理
- throw 烦人_烦人的简单句子聚类
- 苹果因芯片短缺优先生产iPhone 13 常规iPad平均交付时间超7周
- QuantLib 金融计算——随机过程之概述
- KVM的安装和配置命令详解
- 【斐波那切数列】LeetCode 70. Climbing Stairs
- swagger php修改成中文,PHP使用swagger自动生成API文档
- 1992-2021合集 全国大学生数学建模竞赛(历年赛题题目+定位分析)
- java fop_XSL-FO 和FOP相关技术详解(转载)
- 一个在线运行的Taro小程序完整实例
- js实现图片放大镜效果
- python 获取硬盘信息失败请谨慎操作_老毛桃pe装机工具出现获取硬盘信息失败,请谨慎操作...
- 计算机二进制造价便宜,二进制计算器/换算
- apmserver导入MySQL_APMServ MySQL 错误
- Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系
- ElasticSearch搜索引擎(高级)