为什么Scala表现得像这样?
更重要的是,如何修复此代码?
我问的是这个问题,因为我需要在几个子类的构造函数声明中使用复杂的类型,我希望保持 DRY 。
class Parent{
type IntAlias=Int
}
class Child (val i1:IntAlias=3) extends Parent{ //Compilation error, why ?
val i2:IntAlias= 1 //No problem here!
}
编译错误:
not found: type IntAlias
class Child (val i1:IntAlias=3) extends Parent{
^
答案 0 :(得分:6)
在您的定义中,IntAlias
是班级Parent
的成员。因此,如果没有Parent
的实例,则无法访问该成员。您可以将您的第二个案例读作val i2: this.IntAlias = 1
。您可以在此处访问实例this
。
对于值而不是类型,这类似于以下内容:
class Parent {
def intValue: Int = 1234
}
class Child(val x: Int = intValue) extends Parent // does not compile
因此,您必须将该成员放在不同的范围内,例如伴随对象:
object Parent {
type IntAlias = Int
}
import Parent.IntAlias
class Child(val i1: IntAlias = 3) extends Parent {
val i2: IntAlias = 1
}