Сумний факт життя Scala - це те, що якщо ви створюєте список [Int], ви можете переконатися, що ваш екземпляр є списком, і ви можете перевірити, що будь-який окремий його елемент є Int, але не що це список [ Int], як легко перевірити:
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?!
Опція, що не використовується, покладає звинувачення прямо на стирання типу:
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?!
Чому це так, і як я його обходжу?
scala 2.10.2
, я побачив замість цього попередження: <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?") ^
я вважаю, що ваше запитання та відповідь є дуже корисними, але я не впевнений, чи корисне це оновлене попередження для читачів.