Mã này được nhận xét, vì vậy chúng ta hãy dành vài phút để thưởng thức rằng:
/** 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.
*/
ý rằng Không là không chính thức, ví dụ. Tôi biết, phải không?
Nếu bạn đã bao giờ thử scalac -Ypatmat-debug, nhận xét đây có thể giúp:
https://github.com/scala/scala/pull/650
reachability là gần như trong tầm tay:
https://issues.scala-lang.org/browse/SI-6146
Nhưng tôi không thấy bất kỳ lời hứa nào về những gì có thể một ngày nào đó sẽ được cảnh báo. Vì lý do hiệu suất? Người ta cũng có thể nói, tại sao nó nên cảnh báo về một instanceOf [Foo [_]]?
Hiện tại, các phần thông số 8.2 - 8.4 khuyến khích lý do tại sao khớp với Foo [a] là thú vị (vì các giới hạn mua lại). Tôi nghĩ tôi sẽ đọc lại lần nữa. Sau một ít cà phê.
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 { ... }
Nguồn
2012-09-10 06:41:33
Trông giống như một lỗi. Tôi sẽ báo cáo. – sschaef