स्कैला संकलक को नीचे दिए गए बयान के लिए चेतावनियां उत्पन्न करनी चाहिए, लेकिन ऐसा नहीं है। क्यूं कर?स्कैला कंपाइलर क्यों चेतावनी उत्पन्न करता है कि क्या बयान हमेशा पैटर्न पैटर्न के अंदर झूठा उत्पन्न करते हैं?
sealed trait T
object A extends T
val s:Seq[T] = Seq(A)
val result = s.map {
//This if should produce a compiler warning
case a if(a == "A") =>
"First"
case a =>
//This if should produce a compiler warning
if (a == "A") {
"Second"
}
else
{
"Third"
}
}
परिणाम आपकी अपेक्षानुसार हो जाएगा "तीसरा", लेकिन संकलक case a if(a == "A")
पर और if (a == "A")
पर एक चेतावनी उत्पन्न हो जाना चाहिए था, लेकिन अफसोस कोई चेतावनी है।
अगर मैं निम्नलिखित कोड लिखने यह बर्ताव करता है जैसे मैं उम्मीद करेंगे:
if(A == "A"){
println("can't happen")
}
// warning: comparing values of types A.type and String using `==' will always yield false
हो रहा क्यों है?
संपादित करें: मैं स्कैला 2.10.1 का उपयोग कर रहा हूं।
मुझे विश्वास है कि जब आप पैटर्न मिलान का उपयोग, आप प्रत्येक मामले के लिए प्रकार निर्दिष्ट करने की आवश्यकता है, अन्यथा आप कुछ भी भरपाई कर देंगे। इसे "केस ए: ए अगर (ए ==" ए ") => ..." में बदलने की कोशिश करें। – Felix
मैंने इसे 'केस ए के साथ करने की कोशिश की: टी अगर (ए == "ए") => 'और अभी भी कोई चेतावनी नहीं है। – coltfred