簡體   English   中英

由this.type參數化的Scala抽象類型

[英]scala abstract type parameterized by `this.type`

我正在嘗試創建ScriptScriptType類。 ScriptType會產生特定抽象類型的Script Script將由創建ScriptScritpType參數化。

我的第一次嘗試是這樣的:

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 SScriptType.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]

因為ScalaScala.this.type型( Scala的任何實例的單例類型),所以ScalaScript可以作為Script[Scala.this.type]子類型被接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM