我想更好地了解斯卡拉,而我似乎无法找到类似于下面的代码有效的用例:在Scala中扩展匿名类型的目的是什么?
class C extends { def m() { /* ... */ } }
什么是允许这样的构造的原理是什么?
谢谢!
我想更好地了解斯卡拉,而我似乎无法找到类似于下面的代码有效的用例:在Scala中扩展匿名类型的目的是什么?
class C extends { def m() { /* ... */ } }
什么是允许这样的构造的原理是什么?
谢谢!
我想这里的唯一理由是“如果可能,避免特殊情况”。你可以扩展任何类,一个匿名类是一个类,所以你可以扩展一个匿名类。
你可能是对的(+1)。但是,如果确实存在的话,会爱一个实际的用例:) – Eyvind
我不认为有一个... –
我同意金,继承允许共享行为或表示给定的层次结构。但是,如果父类是匿名的,则不能有两个子类扩展相同的父类。 – paradigmatic
事实上,这不是一个匿名类!它是一个早期的初始化器,它作为超类之前构造函数的一部分运行。 从another stackoverflow question引述出色答卷:
abstract class X {
val name: String
val size = name.size
}
class Y extends {
val name = "class Y"
} with X
如果代码是不是写为
class Z extends X {
val name = "class Z"
}
然后当Z得到初始化将发生一个空指针异常,因为大小在正常名前初始化初始化的排序(上课之前的超类)。
它叫做Early definitions它们处理超类初始化顺序问题。
您提供的示例不是结构类型,而是匿名类。这并不是说它解释了为什么你可以扩展它... –
你是对的,我更新了标题 – Eyvind