提取器:

1、其实伴生对象有两个方法 ,A: apply     B : unapply方法

2、我们使用apply方法来构造我们的一个对象, 不需要使用new关键字了。对吧。

3、我们使用unapply方法来提取我们的值。

4、这样的行为叫提取器,

5、默认的行为,使用对象进行模式匹配的时候,会默认调用unapply方法,进行模式匹配

提取器是从传递给它的对象中提取出构造该对象的参数。

Scala 标准库包含了一些预定义的提取器,我们会大致的了解一下它们。

Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。

以下实例演示了邮件地址的提取器对象:

object Test {def main(args: Array[String]) {println ("Apply 方法 : " + apply("Zara", "gmail.com"));println ("Unapply 方法 : " + unapply("Zara@gmail.com"));println ("Unapply 方法 : " + unapply("Zara Ali"));}// 注入方法 (可选)def apply(user: String, domain: String) = {user +"@"+ domain}// 提取方法(必选)def unapply(str: String): Option[(String, String)] = {val parts = str split "@"if (parts.length == 2){Some(parts(0), parts(1)) }else{None}}
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
Apply 方法 : Zara@gmail.com
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

以上对象定义了两个方法: apply 和 unapply 方法。通过 apply 方法我们无需使用 new 操作就可以创建对象。所以你可以通过语句 Test("Zara", "gmail.com") 来构造一个字符串 "Zara@gmail.com"。

unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。实例中我们使用 Unapply 方法从对象中提取用户名和邮件地址的后缀。

实例中 unapply 方法在传入的字符串不是邮箱地址时返回 None。代码演示如下:

unapply("Zara@gmail.com") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

提取器使用模式匹配

在我们实例化一个类的时,可以带上0个或者多个的参数,编译器在实例化的时会调用 apply 方法。我们可以在类和对象中都定义 apply 方法。

就像我们之前提到过的,unapply 用于提取我们指定查找的值,它与 apply 的操作相反。 当我们在提取器对象中使用 match 语句是,unapply 将自动执行,如下所示:

object Test {def main(args: Array[String]) {val x = Test(5)println(x)x match{case Test(num) => println(x + " 是 " + num + " 的两倍!")//unapply 被调用case _ => println("无法计算")}}def apply(x: Int) = x*2def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

执行以上代码,输出结果为:

$ scalac Test.scala
$ scala Test
10
10 是 5 的两倍!

Scala 提取器(Extractor)相关推荐

  1. 2021年大数据常用语言Scala(三十五):scala高级用法 提取器(Extractor)

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

  2. scala 提取器模式匹配_Scala提取器应用,取消应用和模式匹配

    scala 提取器模式匹配 Scala extractor is an object which has a method called unapply as one of its members. ...

  3. scala基础之提取器extractor

    一 apply & unapply方法 apply方法我们已经非常熟悉了,它帮助我们无需new操作就可以创建对象,而unapply方法则用于析构出对象,在模式匹配中特别提到,如果一个类要能够应 ...

  4. Scala入门到精通——第二十五节 提取器(Extractor)

    本节主要内容 apply与unapply方法 零变量或变量的模式匹配 提取器与序列模式 scala中的占位符使用总结 1. apply与unapply方法 apply方法我们已经非常熟悉了,它帮助我们 ...

  5. 3文件提取器_eMail Address Extractor for Mac(邮件地址提取器)

    eMail Address Extractor for Mac 是一款电子邮件地址提取器,非常直观,只需选择输出文件格式,然后将数据文件或整个目录拖放到App区,以快速生成所有有效电子邮件地址的非重复 ...

  6. Scala基础教程(九):提取器、文件I/O

    模式匹配使用提取器: 当一个类的实例后跟括号使用零个或多个参数的列表,所述编译器调用应用的方法在该实例上.我们可以定义同时适用对象和类. 如上述所提到的,unapply方法的目的是提取我们寻找一个特定 ...

  7. Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)

    文章目录 1. 类和对象 2. Trait 3. 模式匹配 4. 正则 5. 异常处理 6. 提取器 7. 文件 IO 学自 https://www.runoob.com/scala/scala-tu ...

  8. android7.1解包打包工具,万能解包提取器Universal Extractor v1.7下载

    软件爱好者经常会从小众的软件站下载,尝鲜各种酷软,但是有时候难免会遇到加壳的李鬼软件,这时可以借助Universal Extractor帮你提取软件存档文件,轻松一键即可完成提取. Universal ...

  9. android apk提取工具,APK提取器(Apk Extractor)

    Apk Extractor是一款可以提取安卓手机中已经安装的程序的apk安装包的应用,最然用re管理器或是其他工具也可以提取apk安装包,不过那都是需要root才能使用,这款Apk Extractor ...

最新文章

  1. ssm框架requestmapping找不到_框架学习,就是介么简单
  2. Ajax中请求被缓存的问题
  3. python处理json_Python处理JSON
  4. jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】
  5. Python随笔-切片
  6. java 虚类private 继承_Java经典面试36题和答案
  7. xadsafe做暗刷_手把手教你如何去掉网吧广告之PUBWin2015_XADSAFE
  8. PyCharm:ModuleNotFoundError: No module named 'selenium'
  9. 容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍
  10. python实现猜数字小游戏
  11. 雅马哈发电机换机油教程_康明斯柴油发电机组怠速一会就自动停机是什么故障...
  12. python下GDAL库安装——以pycharm编译器为例
  13. java递归实现汉字组词穷举_Javascript迭代、递推、穷举、递归常用算法实例讲解...
  14. 用逻辑门设计一个CPU
  15. 简历职称 计算机,个人简历专业技术职务怎么填 就是你所学的专业技术是你取得...
  16. Unity图片优化神器 - Dither算法进阶方案
  17. fx3u4ad一adp说明书_三菱PLC模块FX3U-4AD与FX3U-4AD-ADP的区别
  18. 关于部分小米机型沉浸式图标变色失败的解决方式
  19. layui当前表格第一行_layui数据表格新增一行
  20. 电路与模拟电子技术第一次作业及要点(一、二两章)

热门文章

  1. 利用gcc自带的功能-fstack-protector检测栈溢出及其实现【转】
  2. TAI与TDT的转换(经过stk检验)
  3. 微服务架构讲解,通俗易懂
  4. OpenCV入门系列 —— cv::erode、cv::dilate 图像腐蚀和膨胀
  5. 跨平台基础网络框架Mars初探
  6. go语言生成.proto生成go文件
  7. 后端生成图片验证码,Kotlin生成图片验证码,Java生成图片验证码,图片验证码的生成和校验
  8. Unity3D开发基础知识详解
  9. php多行文本框代码,1分钟实现多行文本框[textarea]自动高度jquery 插件
  10. Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器