2011-11-28 10 views
6

Dlaczego nie produkują następujące ostrzeżenie, gdy -unchecked jest włączona:Missing ostrzeżenie niewyczerpującym meczu

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 
    } 
} 

Wydaje miałem dokładnie same problem before w dniach Scala 2.8.0, bez wystarczająca odpowiedź.


EDIT

@Jed To nie ma sensu dla mnie, że ostrzeżenie jest emitowany tylko przez non-klasy abstrakcyjnej Entry. Rozważmy następującą sytuację:

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 
} 

Jedynym sposobem, aby ostrzeżenia wyświetlane jest mieć betonu klasy Entry w Order!

+1

https://issues.scala-lang.org/browse/SI-4691 –

Odpowiedz

3

To nie skarżą się na pniu:

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 
+0

Ah wielki, a następnie została ona ustalona. Teraz tylko czekam do "początku 2012";) –

+0

@ Siss Właściwie to jestem pewien, że Scala 2.10 przyjdzie z virtpatmatch, która wcale nie cierpi z powodu tego problemu (lub wielu innych błędów związanych z dopasowywaniem wzorca). To prawda, że ​​prawdopodobnie pojawi się nowy zestaw problemów! :-) –

+0

Hmmm, teraz mnie ciekawisz - co to jest virtpatmatch? (Wczoraj musiałem dodać "@ niezaznaczone" w miejscu, które było wyraźnie fałszywe pozytywne). –

2

Wpis jest cechą, a nie klasą przypadku.