2011-11-28 61 views
6

为什么不下面产生警告,失踪警告时-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 
    } 
} 

看来我有完全相同的斯卡拉2.8.0的日子same problem before,没有足够的答案。


编辑

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

只有这样,才能使警告显示是有一个具体的类OrderEntry

+1

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

回答

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

阿大,然后将其固定。现在只是等待'早期2012';) –

+0

@Sciss实际上,我非常确定Scala 2.10将带有virtpatmatch,它不会遇到这个问题(或许多其他模式匹配错误)。当然,它可能会带来一系列新问题! :-) –

+0

嗯,现在你让我好奇 - 什么是virtpatmatch? (事实上​​,昨天我需要在一个显然是误报的地方添加一个'@ unchecked') –

2

条目是一个特质,而不是案例类。