Verwechslung mit existenziellen Typen in der Scala

Ich hatte Mühe, existenzielle Typen in Scala zu verstehen, kann es aber nicht herausfinden. Hier ist mein Testcode:

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"

Mir wurde gesagt, dassArray[T] forSome {type T} bedeutet jede Art von Array wie Array [Int], Array [String] usw.Array[T forSome {type T}] bedeutet Array [Any]. Laut dem Ergebnis meines Testcodes kann ich diesen Unterschied jedoch nicht feststellen, und die Kompilierungsfehlermeldung ist ebenfalls verwirrend. Was machtrequired: T meint? Ich weiß es zu schätzen, wenn jemand eine detaillierte Erklärung geben kann, danke!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage