2009-12-03 19 views
9

क्या कोई विशेष कारण है Regex.MatchData.group (i: Int): java.lang.String विकल्प [स्ट्रिंग] के बजाए शून्य देता है?Regex.MatchData वापस लौट रहा है: विकल्प क्यों नहीं [स्ट्रिंग]?

क्या स्कैला में नल को संभालने के लिए "स्केल वे" है?

उत्तर

9

यह शून्य देता है क्योंकि यह जावा लाइब्रेरी पर एक उथला इंटरफ़ेस है। मुझे लगता है कि यह भी बेकार है, और मैं इसके द्वारा काटा गया है।

यदि आपको कोई मान मिलता है जो शून्य हो सकता है, तो आप 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 
+0

मैं हमेशा उन वस्तु परिभाषाओं :) पैटर्न मिलान उदाहरण काफी है की जाँच करने के भूल जाते हैं दिलचस्प। –

+0

केवल एक नोट: 'विकल्प (मूल्य) 'केवल स्कैला 2.8 में काम करता है। 2.7.x –

+0

पर्याप्त नहीं है। मैं 2.8 सामान टैगिंग पर एक बार बेहतर था। –

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