क्या कोई विशेष कारण है Regex.MatchData.group (i: Int): java.lang.String विकल्प [स्ट्रिंग] के बजाए शून्य देता है?Regex.MatchData वापस लौट रहा है: विकल्प क्यों नहीं [स्ट्रिंग]?
क्या स्कैला में नल को संभालने के लिए "स्केल वे" है?
क्या कोई विशेष कारण है Regex.MatchData.group (i: Int): java.lang.String विकल्प [स्ट्रिंग] के बजाए शून्य देता है?Regex.MatchData वापस लौट रहा है: विकल्प क्यों नहीं [स्ट्रिंग]?
क्या स्कैला में नल को संभालने के लिए "स्केल वे" है?
यह शून्य देता है क्योंकि यह जावा लाइब्रेरी पर एक उथला इंटरफ़ेस है। मुझे लगता है कि यह भी बेकार है, और मैं इसके द्वारा काटा गया है।
यदि आपको कोई मान मिलता है जो शून्य हो सकता है, तो आप Option(value)
स्कैला 2.8 पर लिख सकते हैं और यह None
या Some(value)
बन जाएगा। यही कारण है कि पैटर्न मिलान के साथ काम नहीं करता है, लेकिन आप उस के लिए अपने स्वयं के निकालने लिख सकते हैं:
object Optional {
def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}
उदाहरण:
scala> val a:String = null
a: String = null
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got none
scala> val a = "string"
a: java.lang.String = string
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got string
scala> val a = "5"
a: java.lang.String = 5
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value.toInt)
| }
Got 5
मैं हमेशा उन वस्तु परिभाषाओं :) पैटर्न मिलान उदाहरण काफी है की जाँच करने के भूल जाते हैं दिलचस्प। –
केवल एक नोट: 'विकल्प (मूल्य) 'केवल स्कैला 2.8 में काम करता है। 2.7.x –
पर्याप्त नहीं है। मैं 2.8 सामान टैगिंग पर एक बार बेहतर था। –