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

文章目录
- 提取器(Extractor)
- 定义提取器
提取器(Extractor)
我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如:

那是不是所有的类都可以进行这样的模式匹配呢?答案是:
         不可以的
要想支持模式匹配,必须要实现一个提取器
[NOTE]
- 样例类自动实现了apply、unapply方法
定义提取器
        之前我们学习过了,实现一个类的伴生对象中的apply方法,可以用类名来快速构建一个对象。伴生对象中,还有一个unapply方法。与apply相反,unapply是将该类的对象,拆解为一个个的元素。


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

示例
- 创建一个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的泛型,敬请期待٩(๑>◡<๑)۶











