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

एक ही तरीका है एक ठोस वर्ग 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

आह महान है, तो यह तय किया गया था। अब बस 'शुरुआती 2012' तक इंतजार कर रहे हैं;) –

+0

@ स्कीस असल में, मुझे पूरा यकीन है कि स्कैला 2.10 virtpatmatch के साथ आएगा, जो इस समस्या से ग्रस्त नहीं है (या कई अन्य पैटर्न मिलान करने वाली बगों में से _any_)। अनुमोदित, यह शायद समस्याओं के _new_ सेट के साथ आ जाएगा! :-) –

+0

हम्म, अब आप मुझे उत्सुक बना दिया - virtpatmatch क्या है? (वास्तव में कल मुझे एक ऐसे स्थान पर 'अनचेक' जोड़ने की ज़रूरत थी जो स्पष्ट रूप से झूठी सकारात्मक थी) –

2

प्रवेश एक विशेषता वर्ग है, एक केस क्लास नहीं है।

संबंधित मुद्दे