抽象型メンバの配列のためのクラスマニフェストがありません

私は配列のインスタンス化でクラスマニフェストを提供するための推奨を探しています。私はこのコードをコンパイルしました(これはうまくコンパイルされます):

trait Ref[A]
trait Struct[A] {
  val arr = new Array[Ref[A]](1)
}

これに:

trait Ref[S <: Sys[S], A]
trait Sys[Self <: Sys[Self]] {
  type R[A] <: Ref[Self, A]
}

trait Struct[S <: Sys[S], A] {
  val arr = new Array[S#R[A]](1)
}

This fails with message "cannot find class manifest for
element type S#R[A]"

では、どうすればこの問題を解決できますか?

ベストアンサー

私は簡単な間接を含む1つの解決策を考え出すことができます:

trait Sys[Self <: Sys[Self]] {
  type R[A] <: Ref[Self, A]
  def newRefArray[A](size: Int): Array[Self#R[A]]
}

trait Struct[S <: Sys[S], A] {
  def sys: S
  val arr = sys.newRefArray[A](1)
}

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です