我有一个案例类定义如下:
case class StreetSecondary(designator: String, value: Option[String])
Run Code Online (Sandbox Code Playgroud)
然后我定义一个显式的伴侣对象:
object StreetSecondary {
//empty for now
}
Run Code Online (Sandbox Code Playgroud)
定义显式伴随对象StreetSecondary的行为导致编译器生成"隐含伴随对象"丢失; 即替换为无法访问编译器生成的版本.例如,该tupled方法可通过此隐式伴随对象在案例类StreetSecondary上使用.但是,一旦我定义了显式伴随对象,该tupled方法就会"丢失".
那么,我需要定义/添加/更改上面的StreetSecondary显式伴随对象,以重新获得所有丢失的功能,并替换编译器提供的隐式伴随对象?我想要的不仅仅是tupled恢复的方法.我想要unapply恢复所有功能(例如,包括提取器/ ).
感谢您提供的任何指导/指导.
更新1
我已经做了足够的搜索来发现几件事:
A)必须在其案例类之前定义显式伴随对象(至少在Eclipse Scala-IDE工作表中就是这种情况,并且代码在IntelliJ IDE的工作表中不起作用,无论哪个先出现).
B)有一个强制tupled工作的技术技巧(谢谢drstevens):(StreetSecondary.apply _).tupled虽然这解决了特定的tupled方法问题,但它仍然没有准确或完整地描述scala编译器在隐式伴随对象中提供的内容.
C)最后,可以定义显式伴随对象以扩展与主构造函数的参数的签名匹配的函数,并返回案例类的实例.它看起来像这样:
object StreetSecondary extends ((String, Option[String]) => StreetSecondary) {
//empty for now
}
Run Code Online (Sandbox Code Playgroud)
同样,我仍然不能准确或完整地描述scala编译器在隐式伴随对象中提供的内容.