我在scala中有一个编译器错误,我不知道它引用了什么:
假设这些声明:
trait Abstract {
type MyType
}
trait AInner
trait A extends Abstract{
type MyType <: AInner
}
trait BInner {
def bMethod : Int
}
trait B extends Abstract with A{
override type MyType <: BInner with A#MyType
}
Run Code Online (Sandbox Code Playgroud)
我在这里尝试实现的(在trait中B)是进一步限制MyType声明的类型Abstract,因此任何类型的值都MyType必须扩展MyTypemixin树中的所有s.
编译器给我这个消息(如标题所示):
类型MyType是一个易失性类型; 不能覆盖具有非易失性上限的类型.我理解,类型易变性在这里发生是因为类型连接with A#MyType,错误的一部分:具有非易失性上限的类型可能是指类型声明type MyType <: AInner,其中AInner不是抽象类型,因此是非易失性的.