scala> class A
defined class A
scala> class B
defined class B
scala> val a: A = new A
a: A = A@551510e8
scala> a match {
| case _: B => println("unlikely")
| case _ => println("no match")
| }
no match
Разве в приведенном выше примере компилятор не должен сказать мне, что один из случаев никогда не может совпадать? Недавно меня привлек немного более сложный пример, который привел к ненужной ошибке, которую должен был обнаружить компилятор.
Изменить:
Просто чтобы было понятнее вопрос. Это невозможно в Scala по какой-то причине, которую я не вижу? (Я могу понять, если типы использовали дженерики, а стирание типов вызывало проблемы, но это выглядит довольно прямолинейно.) И если это не невозможно, есть ли законные причины, по которым этого нет в Scala? Если нет, то когда он будет добавлен? ;)