Отсутствует предупреждение о неисчерпывающем совпадении - PullRequest
6 голосов
/ 28 ноября 2011

Почему следующее не выдает предупреждение, когда -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
   }
}

Кажется, у меня была точно такая же проблема до во времена 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
}

Единственный способ сделать предупреждение - иметь конкретный класс Entry в Order!

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Жалуется на ствол:

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
2 голосов
/ 28 ноября 2011

Вступление - это черта, а не класс дела.

...