Scala 提取器(Extractor)
提取器:
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)相关推荐
- 2021年大数据常用语言Scala(三十五):scala高级用法 提取器(Extractor)
目录 提取器(Extractor) 定义提取器 提取器(Extractor) 我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量.例如: // ...
- scala 提取器模式匹配_Scala提取器应用,取消应用和模式匹配
scala 提取器模式匹配 Scala extractor is an object which has a method called unapply as one of its members. ...
- scala基础之提取器extractor
一 apply & unapply方法 apply方法我们已经非常熟悉了,它帮助我们无需new操作就可以创建对象,而unapply方法则用于析构出对象,在模式匹配中特别提到,如果一个类要能够应 ...
- Scala入门到精通——第二十五节 提取器(Extractor)
本节主要内容 apply与unapply方法 零变量或变量的模式匹配 提取器与序列模式 scala中的占位符使用总结 1. apply与unapply方法 apply方法我们已经非常熟悉了,它帮助我们 ...
- 3文件提取器_eMail Address Extractor for Mac(邮件地址提取器)
eMail Address Extractor for Mac 是一款电子邮件地址提取器,非常直观,只需选择输出文件格式,然后将数据文件或整个目录拖放到App区,以快速生成所有有效电子邮件地址的非重复 ...
- Scala基础教程(九):提取器、文件I/O
模式匹配使用提取器: 当一个类的实例后跟括号使用零个或多个参数的列表,所述编译器调用应用的方法在该实例上.我们可以定义同时适用对象和类. 如上述所提到的,unapply方法的目的是提取我们寻找一个特定 ...
- Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)
文章目录 1. 类和对象 2. Trait 3. 模式匹配 4. 正则 5. 异常处理 6. 提取器 7. 文件 IO 学自 https://www.runoob.com/scala/scala-tu ...
- android7.1解包打包工具,万能解包提取器Universal Extractor v1.7下载
软件爱好者经常会从小众的软件站下载,尝鲜各种酷软,但是有时候难免会遇到加壳的李鬼软件,这时可以借助Universal Extractor帮你提取软件存档文件,轻松一键即可完成提取. Universal ...
- android apk提取工具,APK提取器(Apk Extractor)
Apk Extractor是一款可以提取安卓手机中已经安装的程序的apk安装包的应用,最然用re管理器或是其他工具也可以提取apk安装包,不过那都是需要root才能使用,这款Apk Extractor ...
最新文章
- ssm框架requestmapping找不到_框架学习,就是介么简单
- Ajax中请求被缓存的问题
- python处理json_Python处理JSON
- jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】
- Python随笔-切片
- java 虚类private 继承_Java经典面试36题和答案
- xadsafe做暗刷_手把手教你如何去掉网吧广告之PUBWin2015_XADSAFE
- PyCharm:ModuleNotFoundError: No module named 'selenium'
- 容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍
- python实现猜数字小游戏
- 雅马哈发电机换机油教程_康明斯柴油发电机组怠速一会就自动停机是什么故障...
- python下GDAL库安装——以pycharm编译器为例
- java递归实现汉字组词穷举_Javascript迭代、递推、穷举、递归常用算法实例讲解...
- 用逻辑门设计一个CPU
- 简历职称 计算机,个人简历专业技术职务怎么填 就是你所学的专业技术是你取得...
- Unity图片优化神器 - Dither算法进阶方案
- fx3u4ad一adp说明书_三菱PLC模块FX3U-4AD与FX3U-4AD-ADP的区别
- 关于部分小米机型沉浸式图标变色失败的解决方式
- layui当前表格第一行_layui数据表格新增一行
- 电路与模拟电子技术第一次作业及要点(一、二两章)
热门文章
- 利用gcc自带的功能-fstack-protector检测栈溢出及其实现【转】
- TAI与TDT的转换(经过stk检验)
- 微服务架构讲解,通俗易懂
- OpenCV入门系列 —— cv::erode、cv::dilate 图像腐蚀和膨胀
- 跨平台基础网络框架Mars初探
- go语言生成.proto生成go文件
- 后端生成图片验证码,Kotlin生成图片验证码,Java生成图片验证码,图片验证码的生成和校验
- Unity3D开发基础知识详解
- php多行文本框代码,1分钟实现多行文本框[textarea]自动高度jquery 插件
- Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器