Код прокомментирован, так что давайте посмотрим на это:
/** If we can absolutely rule out a match we can fail early.
* This is the case if the scrutinee has no unresolved type arguments
* and is a "final type", meaning final + invariant in all type parameters.
*/
Обратите внимание, что, например, None не является окончательным. Я точно знаю?
Если вы когда-нибудь попробуете scalac -Ypatmat-debug, комментарий здесь может помочь:
https://github.com/scala/scala/pull/650
Достижимость почти достижима:
https://issues.scala-lang.org/browse/SI-6146
Но я не вижу никаких обещаний относительно того, о чем можно было бы когда-нибудь предупредить. По соображениям производительности? Можно также сказать, почему он должен предупреждать об instanceOf [Foo [_]]?
На данный момент разделы спецификации 8.2 - 8.4 объясняют, почему сопоставление с Foo [a] интересно (из-за ограничений, которые a получает). Думаю, я пойду это еще раз. После кофе.
trait Foo[+A]
final class Fuzz[+A] extends Foo[A]
final object Fooz extends Foo[Nothing]
object Futz extends Foo[Nothing]
//error
Fooz match {
case x: List[_] => println("A")
case _ => println("B")
}
//no error
Futz match { ... }
person
som-snytt
schedule
10.09.2012