confusão com tipos existenciais em scala
Eu estava lutando para entender os tipos existenciais no scala, mas não consigo descobrir. Aqui está o meu código de teste:
scala> val a: Array[T] forSome {type T} = Array(1,2.2,"3")
a: Array[_] = Array(1, 2.2, 3)
scala> val b: Array[T forSome {type T}] = Array(1,2.2,"3")
b: Array[T forSome { type T }] = Array(1, 2.2, 3)
scala> a(0)
res35: Any = 1
scala> b(0)
res36: Any = 1
scala> a(0) = "x"
<console>:10: error: type mismatch;
found : String("x")
required: T
a(0) = "x"
^
scala> b(0) = "x"
Me disseram queArray[T] forSome {type T}
significa qualquer tipo de matriz, como matriz [Int], matriz [String] etc.Array[T forSome {type T}]
significa Matriz [Qualquer]. Mas de acordo com o resultado do meu código de teste, não vejo essa diferença, e a mensagem de erro de compilação também é confusa. O querequired: T
significa? Agradeço se alguém puder dar uma explicação detalhada, obrigado!