संभव डुप्लिकेट:
How to write a proper null-safe coalescing operator in scala?स्काला बराबर
सी # में ??
ऑपरेटर की स्काला बराबर क्या है?
उदाहरण:
string result = value1 ?? value2 ?? value3 ?? String.Empty;
संभव डुप्लिकेट:
How to write a proper null-safe coalescing operator in scala?स्काला बराबर
सी # में ??
ऑपरेटर की स्काला बराबर क्या है?
उदाहरण:
string result = value1 ?? value2 ?? value3 ?? String.Empty;
मेरा मानना है कि वहाँ एक है नहीं है। आप नल कोलेसिंग ऑपरेटर के कार्यान्वयन के लिए this पोस्ट देख सकते हैं।
आप अपने आप को समान अर्थशास्त्र के साथ लिख सकते हैं - यहां एक ऐसा है जो बाएं से दाएं मूल्यांकन के कारण पूरे प्रकार पर जोर देता है, लेकिन कोई इसे बदल सकता है?: दाएं से बाएं मूल्यांकन प्राप्त करने के लिए प्रकार चौड़ा रूप में की जरूरत:
class CoalesceNull[A <: AnyRef](a: A) { def ??(b: A) = if (a==null) b else a }
implicit def coalesce_anything[A <: AnyRef](a: A) = new CoalesceNull(a)
scala> (null:String) ?? (null:String) ?? "(default value)"
res0: String = (default value)
लेकिन कारण है कि इस ऑपरेटर मौजूद नहीं है हो सकता है कि Option
इस तरह के परिदृश्यों के साथ-साथ न के बराबर मूल्यों की हैंडलिंग के कई इसी तरह के मामलों से निपटने का पसंदीदा तरीका है:
scala> List((null:String),(null:String),"(default value)").flatMap(Option(_)).headOption
res72: Option[java.lang.String] = Some((default value))
(यदि आप थे सुनिश्चित करें कि कम से कम एक गैर-शून्य था, आप बस head
का उपयोग कर सकते हैं; ध्यान दें कि यह काम करता है क्योंकि Option(null)
None
में धर्मान्तरित और flatMap
एक साथ बटोरता केवल Some(_)
प्रविष्टियों।)
मुझे विश्वास है कि यह 'def ?? (बी: => ए)' होना चाहिए अर्थात् समानताएं बनाना। मुझे लगता है कि एल्विस ऑपरेटर के दाहिने तरफ का मूल्यांकन नहीं किया जाना चाहिए जब तक कि 'ए' शून्य न हो। यद्यपि गलत हो सकता है। – sinharaj
@ सिंहाज - आप शायद सही हैं। मैं परिचित नहीं हूं कि सी # यह कैसे करता है। –
getOrElse की कोशिश करो। मेरे दोस्त ने सुझाव दिया।
कोई उचित ऑपरेटर नहीं है लेकिन सरल अभिव्यक्तियों के लिए आसान हो सकता है: 'विकल्प (शून्य: स्ट्रिंग) .getOrElse (" डिफ़ॉल्ट मान ")' या 'विकल्प (विकल्प (शून्य: स्ट्रिंग) .getOrElse (शून्य: स्ट्रिंग))। GetOrElse ("डिफ़ॉल्ट मान") ' – karmakaze
लिंक किए गए उत्तर को देखें, लेकिन, बिंदु पर अधिक, nulls से बचाता है। विकल्प का प्रयोग करें।
This blog post कैसे ग्रूवी के "एल्विस ऑपरेटर ?:
" स्काला में लागू करने के लिए शामिल किया गया। यह सी # के ??
ऑपरेटर के समान ही काम करता है।
http://stackoverflow.com/questions/1364361/how-to-write-a-proper-null-safe-coalescing-operator-in-scala? – Philippe