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!