2011-11-28 11 views
6

Perché non produce un avvertimento seguente, quando -unchecked è abilitato:mancante avvertimento del match non esaustivo

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

sembra Ho avuto esattamente lo same problem before nei giorni di Scala 2.8.0, senza risposta sufficiente


EDIT

@Jed Non ha senso per me che l'avvertimento viene emesso solo per una classe non astratta Entry. Si consideri la seguente situazione:

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 
} 

L'unico modo per fare l'avvertimento appare è quello di avere una classe concreta Entry in Order!

+1

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

risposta

3

E si lamenta sul tronco:

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 grande, poi è stato risolto. Ora aspettiamo solo 'All'inizio del 2012';) –

+0

@Sciss In realtà, sono abbastanza sicuro che Scala 2.10 arriverà con virtpatmatch, che non soffre affatto di questo problema (o di nessuno dei tanti altri bug di matching pattern). Certo, probabilmente verrà con un nuovo set di problemi! :-) –

+0

Hmmm, ora mi hai incuriosito - Cos'è il virtpatmatch? (In effetti ieri avevo bisogno di aggiungere un '@ unchecked 'in un posto che era chiaramente un falso positivo) –

2

L'ingresso è un tratto, non una classe di casi.

Problemi correlati