繁体   English   中英

涉及自我类型时,为什么类型成员范围会停止工作

[英]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)

似乎“ MyBar里面”不一定是StuffDoer类型,但为什么呢? MyBar内部的确切界限是什么? Component是否覆盖其类型边界?

更奇怪的是,当我将Bar内的override type My <: StuffDoer更改为:

override type My = StuffDoer

然后突然一切都编译了。 怎么会???

如果StuffDoer类具有doStuff方法,则所有子类也都可以,但并非所有子类型都可以。 例如NothingNullStuffDoer子类型,但是您不能在NothingNull类型的变量x上调用x.doStuff

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM