2017-06-02 14 views
1

ScriptScriptTypeのクラスを作成しようとしています。 ScriptTypeは、特定の抽象タイプのScriptを生成します。 Scriptは、それらを作成したScritpTypeによってパラメータ化されます。`this.type`でパラメータ化されたスカラ抽象型

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] 

が、イムは、この例では

Error:(10, 10) overriding type S in trait ScriptType with bounds <: Script[Scala.this.type]; 
    type S has incompatible type 
    type S = ScalaScript 

ScriptType.Scalatype Sの割り当てに関して、コンパイル中にエラーを取得がScript[Scala.this.type]ScalaScriptではありません。

私の最初の試みは、このように見えましたか?

答えて

2

ScalaScriptthis.typeは、各Scalaインスタンスに対して一意ですシングルトンタイプを意味するので、Script[Scala.this.type]ではありません。

あなたはScript反変することによってこの問題を解決することができますScalaScala.this.typeスーパーの(シングルトンタイプであるため、ScalaScriptは、Script[Scala.this.type]サブタイプとして受け入れることができるように

trait Script[-Type <: ScriptType]

Scalaの任意のインスタンス)。

関連する問題