[英]Why are the bounds of type parameters ignored when using existential types in Scala?
[英]Why do Type Member bounds stop working when self types are involved
说我用自我类型定义一些特征。 特征和自我类型都具有抽象类型成员。 自类型中的抽象类型成员应被特征中的自类型覆盖。
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
是否覆盖其类型边界?
更奇怪的是,当我将Bar
内的override type My <: StuffDoer
更改为:
override type My = StuffDoer
然后突然一切都编译了。 怎么会???
如果StuffDoer
类具有doStuff
方法,则所有子类也都可以,但并非所有子类型都可以。 例如Nothing
和Null
是StuffDoer
子类型,但是您不能在Nothing
或Null
类型的变量x
上调用x.doStuff
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.