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

2021-01-26 16:00:24 浏览数 (1)

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


提取器(Extractor)

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

那是不是所有的类都可以进行这样的模式匹配呢?答案是: 不可以的 要想支持模式匹配,必须要实现一个提取器

[NOTE]

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

定义提取器

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

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

语法格式

示例

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

参数代码

代码语言:javascript复制
/**
  * 通过实现提取器,让普通的类(非样例类)能够支持模式匹配
  *
  */
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的泛型,敬请期待٩(๑>◡<๑)۶

0 人点赞