簡體   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