2011-11-28 21 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 
    } 
} 

を私がいないと、Scalaの2.8.0の日で正確にsame problem beforeを持っていたようです十分な答え。


EDIT

それは警告が唯一の非抽象クラスEntryのために放出されることを私のために意味をなさない@Jed。次のような状況を考えてみます。

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 
} 

警告が表示されるようにする唯一の方法はOrderに具象クラスEntryを持つことです!

+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

素晴らしいああ、それは修正されました。 –

+0

@Sciss実際には、Scala 2.10にはこの問題(または多数の他のパタ​​ーンマッチングバグのうちのどれか)が全くかからないvirtpatmatchが付属していることは間違いありません。確かに、それはおそらく_新しい_一連の問題を伴います! :-) –

+0

うん、今私は好奇心を持っている - virtpatmatchは何ですか? (実際には昨日、私は明らかに偽陽性だった場所に '@ unchecked'を追加する必要がありました) –

2

エントリは、ケースクラスではなく、特性です。それはトランクに文句を言うん