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
類型的對象。