2
私はマイルセービン趣旨の例から、このようなタグ付きのタイプを作成しました:共分散
type Tagged[U] = { type Tag = U }
type @@[T, U] = T with Tagged[U]
sealed trait A
sealed trait E
sealed trait B extends E
sealed trait C extends E
def a(a: String): String @@ A = a.asInstanceOf[String @@ A]
def b(a: String): String @@ B = a.asInstanceOf[String @@ B]
def c(a: String): String @@ C = a.asInstanceOf[String @@ C]
私は方法があります:
def f(e: String @@ E) = ???
を、私はこの方法では、両方のString @@ B
とString @@ C
種類を取りたいですB
とC
の両方がE
に拡張されているためです。どうしたらいいですか?私は@@
共変作ってみました:
type Tagged[U] = { type Tag = U }
type @@[T, +U] = T with Tagged[U]
を、それは助けにはならない - 私は唯一のタイプString @@ E
のオブジェクトを渡すことができます。