在Scala中扩展匿名类型的目的是什么?

时间:2011-09-28 07:18:52

标签: scala anonymous-types extending

我正在努力更好地理解Scala,而且我似乎无法为以下代码找到有效的用例:

class C extends { def m() { /* ... */ } }

允许这种结构的理由是什么?

谢谢!

3 个答案:

答案 0 :(得分:12)

我想这里唯一的理由就是“尽可能避免特殊情况”。你可以扩展任何类,匿名类是一个类,所以你可以扩展一个匿名类。

答案 1 :(得分:11)

事实上,这不是一个匿名的课程!它是一个早期的初始化程序,它作为超类之前的构造函数的一部分运行。 引用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初始化时会发生空指针异常,因为在初始化的正常排序(类之前的超类)中,name在name之前初始化。

答案 2 :(得分:1)

它被称为Early definitions,它们处理超类初始化顺序问题。