0
点赞
收藏
分享

微信扫一扫

scala快速入门系列【提取器】


        本篇作为scala快速入门系列的第三十四篇博客,为大家带来的是关于​提取器​的内容。

scala快速入门系列【提取器】_云计算/大数据


文章目录

  • ​​提取器(Extractor)​​
  • ​​定义提取器​​

提取器(Extractor)

        我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如:

scala快速入门系列【提取器】_spark_02

        那是不是所有的类都可以进行这样的模式匹配呢?答案是:

        ​​不可以的​

        要想支持模式匹配,必须要实现一个​提取器

[NOTE]

  • 样例类自动实现了apply、unapply方法

定义提取器

        之前我们学习过了,实现一个类的伴生对象中的apply方法,可以用类名来快速构建一个对象。伴生对象中,还有一个​​unapply​​方法。与apply相反,​unapply是将该类的对象,拆解为一个个的元素​。

scala快速入门系列【提取器】_java_03

scala快速入门系列【提取器】_云计算/大数据_04

        要实现一个类的提取器,只需要在该类的​伴生对象​中实现一个​unapply​方法即可。


语法格式

scala快速入门系列【提取器】_提取器_05

示例

  • 创建一个Student类,包含姓名年龄两个字段
  • 实现一个类的解构器,并使用match表达式进行模式匹配,提取类中的字段

参数代码

/**
* 通过实现提取器,让普通的类(非样例类)能够支持模式匹配
*
*/
object _15UnapplyDemo {

// 1. 定义一个普通的类
class Student(var name: String, var age: Int)

// 2. 实现unapply方法来定义提取器
object Student {
def unapply(student: Student): Option[(String, Int)] =

if (student != null) {
// 返回一个Some封装数据 -- 供下面模式匹配使用
Some(student.name, student.age)

}
else {
None
}

}

def main (args: Array[String] ): Unit = {

// 3. 创建对象,使用模式匹配来提取值
val student = new Student("张三",20)

student match {

case Student(name,age) => println(s"${name},${age}")

}
}

}

        本期的内容分享就到这里了,喜欢的小伙伴们记得点个赞,持续关注哟~下期为大家介绍的是scala的​泛型​,敬请期待٩(๑>◡<๑)۶

scala快速入门系列【提取器】_scala_06



举报

相关推荐

0 条评论