内容简介:模式匹配(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方法接受一个数据类型,返回另一数据类型,表示可以把入参的数据解构为返回的数据。
比如:
它与上面的case class相比,相当于自己手动实现unapply,这也带来了灵活性。
其就可以解决上面case class 不想暴露具体的类型的缺陷了。如下代码具体讲解了其是怎么实现的:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript高级程序设计(第3版)
[美] Nicholas C. Zakas / 李松峰、曹力 / 人民邮电出版社 / 2012-3-29 / 99.00元
本书是JavaScript 超级畅销书的最新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript 增添了很多适应未来发展的新特性。本书这一版除增加5 章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript 语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深......一起来看看 《JavaScript高级程序设计(第3版)》 这本书的介绍吧!