缺少非详尽匹配的警告

0__*_*0__ 6 scala pattern-matching

-unchecked启用时,为什么以下内容不会产生警告:

object Order {
   sealed trait EntryOption
   case object EmptyEntry extends EntryOption
   trait Entry extends EntryOption

   def isEmpty(a: EntryOption): Boolean = a match {
      case EmptyEntry => true
//    case _: Entry   => false
   }
}
Run Code Online (Sandbox Code Playgroud)

在Scala 2.8.0 之前,我似乎遇到了完全相同的问题,没有足够的答案.


编辑

@Jed对我来说,仅对非抽象类发出警告是没有意义的Entry.考虑以下情况:

trait Order {
  sealed trait EntryOption
  case object EmptyEntry extends EntryOption
  abstract sealed class Entry extends EntryOption

  def isEmpty(a: EntryOption): Boolean = a match {
    case EmptyEntry => true
 // case _: Entry   => false
  }
}

trait OrderImpl extends Order {
  final class EntryImpl extends Entry
}
Run Code Online (Sandbox Code Playgroud)

使警告出现唯一的办法是有一个具体类EntryOrder!

Dan*_*ral 3

它确实在主干上抱怨:

scala> object Order {
     |    sealed trait EntryOption
     |    case object EmptyEntry extends EntryOption
     |    trait Entry extends EntryOption
     | 
     |    def isEmpty( a: EntryOption ) : Boolean = a match {
     |       case EmptyEntry => true
     | //    case _: Entry   => false
     |    }
     | }
<console>:18: warning: match is not exhaustive!
missing combination          Entry

          def isEmpty( a: EntryOption ) : Boolean = a match {
                                                    ^
defined module Order
Run Code Online (Sandbox Code Playgroud)