में गैर-संपूर्ण मैच पर संकलन विफलता करें मान लें कि मेरे पास एक बच्चे, बच्चे के साथ एक गुण, माता-पिता है।एसबीटी
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined module Boy
मैं एक समारोह लिखता हूं जो पैटर्न सीलबंद विशेषता पर मेल खाता है। मेरा f
फ़ंक्शन कुल है क्योंकि केवल एक ही Parent
उदाहरण है।
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
f: (p: Parent)Boolean
फिर, 2 महीने बाद, मैं Parent
के Girl
बच्चे जोड़ने का निर्णय लेते।
scala> case object Girl extends Parent
defined module Girl
और फिर f
विधि को फिर से लिखें क्योंकि हम REPL का उपयोग कर रहे हैं।
scala> def f(p: Parent): Boolean = p match {
| case Boy => true
| }
<console>:10: warning: match may not be exhaustive.
It would fail on the following input: Girl
def f(p: Parent): Boolean = p match {
^
f: (p: Parent)Boolean
मैं एक गैर संपूर्ण मैच का सामना करने के लिए गए थे, तो मैं एक संकलन समय चेतावनी (जैसा कि हम यहाँ देखें) प्राप्त होगी।
हालांकि, मैं संकलन गैर-संपूर्ण मिलान पर विफल कैसे कर सकता हूं?
यह तकनीकी रूप से प्रश्न का उत्तर देता है, लेकिन यह अक्सर एक व्यवहार्य समाधान नहीं है। मैं व्यक्तिगत रूप से ऐसे उत्तरों को देखने में रूचि रखता हूं जिन्हें सभी चेतावनियों पर असफल होने की आवश्यकता नहीं होती है, भले ही वे गड़बड़ हो। –
@TravisBrown: अपनी खुद की कंपाइलर प्लगइन या एसबीटी प्लगइन लिखने का छोटा, यह एकमात्र समाधान उपलब्ध है। –
@ ट्रेविसब्राउन, यह अक्सर "व्यवहार्य" समाधान क्यों नहीं होता है? –