模式匹配(2)scala 里是怎么实现的?

栏目: Scala · 发布时间: 6年前

内容简介:模式匹配(2)scala 里是怎么实现的?

参考博客: http://hongjiang.info/scala-pattern-matching-2/

文章中提到的有6种实现模式匹配的方法:

1.面向对象的分解 (decomposition)

2.访问器模式 (visitor)

3.类型测试/类型造型 (type-test/type-cast)

4.typecase

5.样本类 (case class)

6.抽取器 (extractor)

我直接说结果了,,,,

scala 直接选择了 样本类(case class)和抽取器(extractor)来实现模式匹配

样本类(case class):

case class实际上是scala的语法糖。case class 创建的类型,同时还帮你生成好了 一系列相应的方法,如:toString,hashCode,等方法。

最重要的是帮我们生成了一个伴生对象。这个伴生对象中定义了apply()和unapply 方法、

apply 方法 主要用于构建对象时使用,减少使用new 关键字。构造(工厂模式)

unappy 方法则是为模式匹配所服务。解构(解构模式)

case class 在模式匹配的时候暴露了其构造方法。所以当我们只想把类型暴露给用户,其内部数据表征想对其隐藏时,不宜使用。

抽取器(extractor):

抽取器是指定义了unapply方法的object。在进行模式匹配的时候会调用该方法。

unapply方法接受一个数据类型,返回另一数据类型,表示可以把入参的数据解构为返回的数据。

比如:

模式匹配(2)scala 里是怎么实现的? 模式匹配(2)scala 里是怎么实现的?

模式匹配(2)scala 里是怎么实现的?

它与上面的case class相比,相当于自己手动实现unapply,这也带来了灵活性。

其就可以解决上面case class 不想暴露具体的类型的缺陷了。如下代码具体讲解了其是怎么实现的:

模式匹配(2)scala 里是怎么实现的?

模式匹配(2)scala 里是怎么实现的?


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript高级程序设计(第3版)

JavaScript高级程序设计(第3版)

[美] Nicholas C. Zakas / 李松峰、曹力 / 人民邮电出版社 / 2012-3-29 / 99.00元

本书是JavaScript 超级畅销书的最新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript 增添了很多适应未来发展的新特性。本书这一版除增加5 章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript 语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深......一起来看看 《JavaScript高级程序设计(第3版)》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具