[英]scala abstract type parameterized by `this.type`
我正在嘗試創建Script
和ScriptType
類。 ScriptType
會產生特定抽象類型的Script
。 Script
將由創建Script
的ScritpType
參數化。
我的第一次嘗試是這樣的:
trait Script[Type <: ScriptType]
sealed trait ScriptType {
type S <: Script[this.type]
}
object ScriptType {
class Scala extends ScriptType {
type S = ScalaScript
}
}
import ScriptType._
case class ScalaScript(source: String) extends Script[Scala]
但是我在編譯中遇到有關在ScriptType.Scala
分配type S
的ScriptType.Scala
Error:(10, 10) overriding type S in trait ScriptType with bounds <: Script[Scala.this.type];
type S has incompatible type
type S = ScalaScript
在此示例中, ScalaScript
不是Script[Scala.this.type]
嗎?
ScalaScript
不是Script[Scala.this.type]
,因為this.type
表示每個Scala
實例唯一的單例類型。
您可以通過使Script
互變來解決此問題:
trait Script[-Type <: ScriptType]
因為Scala
是Scala.this.type
的超型( Scala
的任何實例的單例類型),所以ScalaScript
可以作為Script[Scala.this.type]
的子類型被接受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.