È un fatto triste della vita su Scala che se si crea un'istanza di un Elenco [Int], è possibile verificare che la propria istanza sia un Elenco e che sia possibile verificare che ogni singolo elemento di esso sia un Int, ma non che sia un Elenco [ Int], come può essere facilmente verificato:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
L'opzione -unchecked mette esattamente la colpa sulla cancellazione del tipo:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
case l : List[String] => println("A list of strings?!")
^
A list of strings?!
Perché è così e come posso aggirarlo?
scala 2.10.2
, ho visualizzato invece questo avviso: <console>:9: warning: fruitless type test: a value of type List[Int] cannot also be a List[String] (but still might match its erasure) case list: List[String] => println("a list of strings?") ^
trovo la tua domanda e risposta molto utile, ma non sono sicuro che questo avviso aggiornato sia utile per i lettori.