假设我用自我类型定义了一些特征。 traits和self类型都有一个抽象类型的成员。自我类型中的抽象类型成员应该被特征中的自我类型覆盖。
trait Foo{
type My
def make:Seq[My]
}
trait Component {
type My
}
trait Bar extends Foo { this:Component =>
override type My <: StuffDoer
def len = make.map(_.doStuff)
class StuffDoer(str:String) {
def doStuff = "blah"
}
}
这不起作用并给出错误:
Error:(20, 24) value doStuff is not a member of Bar.this.My
def len = make.map(_.doStuff)
似乎My
内的Bar
不一定是StuffDoer
类型,但为什么? My
内Bar
的确切界限是什么? Component
是否会覆盖它的类型边界?
更奇怪的是,当我将override type My <: StuffDoer
内的Bar
更改为:
override type My = StuffDoer
然后突然间,一切都在编译。怎么来???
答案 0 :(得分:0)
如果类StuffDoer
具有方法doStuff
,那么所有子类都可以,但不是所有子类都可以。例如,Nothing
和Null
是StuffDoer
的子类型,但您无法在类型x.doStuff
或{{1}的变量x
上调用Nothing
}}