या तो left
या right
प्रक्षेपण पर getOrElse
बुला के बारे में निकोलस Rinaudo का जवाब शायद Option.getOrElse
के सबसे करीब है।
वैकल्पिक रूप से, आप fold
कर सकते हैं या तो:
scala> val x: Either[String,Int] = Right(5)
x: Either[String,Int] = Right(5)
scala> val a: String = x.fold(l => "left", r => r.toString)
a: String = 5
l
जैसा कि ऊपर गुना में नहीं किया जाता है, तो आप भी लिख सकता है x.fold(_ => "left", r => r.toString)
संपादित करें: असल में, आप सचमुच Option.getOrElse
हो सकता है toOption
पर left
या right
पर प्रक्षेपण करके, उदाहरण के लिए,
scala> val o: Option[Int] = x.right.toOption
o: Option[Int] = Some(5)
scala> val a: String = o.map(_.toString).getOrElse("left")
a: String = 5
स्रोत
2013-10-21 23:01:47
आपको 'या तो' क्यों पसंद नहीं है? –
@ केविन यह मेरी व्यक्तिगत राय है, लेकिन मुझे लगता है कि दो मामले हैं जहां यह उपयोगी है: विफलता या सफलता वापस करने के लिए, या दो संभावित परिणामों में से एक को वापस करने के लिए। पूर्व को 'ट्राई' का उपयोग करके बेहतर सेवा दी जाती है और बाद वाला मैला ही प्रोग्रामिंग की तरह लगता है - मुझे लगता है कि अगर मेरी विधि या तो 'स्ट्रिंग' या 'डेट' वापस कर सकती है, उदाहरण के लिए, यह कुछ रिफैक्टरिंग के साथ कर सकती है। –
मुझे लगता है कि यह सफलता या विफलता वापस करने के लिए एक सत्यापन ढांचे में उपयोगी है। सार्वजनिक एपीआई तब स्पष्ट रूप से आपको बताएगी कि किस प्रकार की सफलता/विफलता वापस आ सकती है, भले ही वे कस्टम स्टेटफुल क्लास हों, जबकि चेक अपवादों के अजीब उपयोग से परहेज करें। एक उदाहरण जो मैं वर्तमान में काम कर रहा हूं वह एक इवेंट-सोर्सिंग फ्रेमवर्क है, जो कुछ सत्यापन के आधार पर एक ईवेंट प्रेषित करेगा। यह या तो अपेक्षित प्रकार की घटना हो सकती है, या किसी प्रकार का "अमान्य घटना" – Guillaume