2011-11-28 62 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

條目是一個特質,而不是案例類。