栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Scala编译器未使用case类的unapply方法进行模式匹配,这是为什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala编译器未使用case类的unapply方法进行模式匹配,这是为什么?

从Scala语言的角度来看这个问题,该实现按规范要求工作。参见http://www.scala-
lang.org/docu/files/ScalaReference.pdf

在第5.3.2节中,案例类被定义为在伴随对象(提取程序)对象中包含unapply的实现。

但是,当我们进行模式匹配(第8.1节)时,案例类在第8.1.6节中有其自己的匹配部分,第8.1.6节根据构造函数的参数指定其在模式匹配中的行为,而无需引用已生成的unapply
/ unapplySeq:

8.1.6构造器模式

句法:

SimplePattern :: = StableId’(’[Patterns]’)

构造函数模式的形式为c(p1,…,pn),其中n≥0。它由一个稳定的标识符c组成,后跟元素模式p1,…,pn。构造函数c是表示案例类的简单名称或限定名称。如果case类是单态的,则它必须符合模式的预期类型,并且x的主要构造函数的形式参数类型被视为元素模式p1,…,pn的预期类型。如果case类是多态的,则实例化其类型参数,以使c的实例符合模式的预期类型。然后,将c的主要构造函数的实例化形式参数类型用作组件模式p1,…,pn的预期类型。该模式匹配从构造函数调用c(v1,…,创建的所有对象

该文档继续描述第8.1.8节中unapply / unapplySeq的用法;但这是规范的一个单独的,不相交的部分,适用于非案例类的类。

因此,您可以认为unapply是在您自己的代码中使用的有用方法,但不是scala语言内部的模式匹配所必需的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号