2
下面的代碼編譯A [B [C]]類型Scala中即嵌套類型構造
case class A(s:Int)
case class B(s:Int)
case class Box[T](t:T)
object DoublyNestedTypes extends App {
println("hello")
val l=List(Box(A(1)))
val l2=Box(A(2))::l
println(l2)
val l3=Box(B(1))::l2
println(l3)
}
和生產:
hello
List(Box(A(2)), Box(A(1)))
List(Box(B(1)), Box(A(2)), Box(A(1)))
有人能解釋什麼是這裏嗎? 爲什麼編譯不會失敗?或者在運行時執行?
我期待這個失敗以來l
類型爲List[Box[A]]
,而 的Box(B(1))
類型是Box[B]
,所以我怎麼能在前面加上Box[B]
到List[Box[A]]
?
l3
現在是什麼類型?
這是否必須做類型擦除?
Haskell編譯時等效代碼會失敗嗎? (我的感覺是它會。)
這是基於子類型的。可比較的Haskell代碼會是一些涉及存在或數據超級的東西。 SupB B'型結構 – jozefg