从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语言内部的模式匹配所必需的方法。



