सबसे पहले, "विपरीत" अपने क्रियान्वयन की कुछ गंभीर समस्या है। विधि पर एक प्रकार पैरामीटर नामित Long
डाल करके आप मानक पुस्तकालय से Long
प्रकार पीछा कर रहे हैं। आप शायद मतलब बजाय निम्नलिखित:
def toOption(value: Long): Option[Long] =
if (value == null) None else Some(value)
यहां तक कि इस तरह की अतर्कसंगत है (के बाद से scala.Long
एक संदर्भ प्रकार नहीं है और null
कभी नहीं हो सकता है), जब तक आप java.lang.Long
है, जो दर्द के लिए एक नुस्खा है और संदर्भ दे रहे उलझन।
def toOption(value: String): Option[String] = Option(value)
इस विधि None
वापस आ जाएगी यदि और केवल यदि value
null
है: अंत में, यहां तक कि अगर आप एक संदर्भ प्रकार के साथ काम कर रहे थे (जैसे String
), तो आपको निम्न में से बिल्कुल बराबर है लेखन बेहतर होगा ।
आपके प्रश्न को हल करने के लिए, मान लीजिए कि हम निम्न विधि है:
def foo(x: Long) = x * 2
आप आम तौर पर foo
के लिए एक Option[Long]
गुजर के मामले में लगता है कि नहीं होना चाहिए, बल्कि "उठाने" foo
के माध्यम से map
Option
में :
scala> val x: Option[Long] = Some(100L)
x: Option[Long] = Some(100)
scala> x map foo
res14: Option[Long] = Some(200)
Option
के पूरे मुद्दे (प्रकार स्तर पर) के लिए एक पूरे से बचने के लिए मॉडल करने के लिए एक "अशक्त" मूल्य की संभावना है NullPointerException
-y की समस्याएं। पर map
का उपयोग करके आप Option
में उस मान पर गणना कर सकते हैं, जबकि यह संभव है कि यह खाली हो।
एक और उत्तर नोटों के रूप में, यह भी getOrElse
उपयोग करने के लिए Option
की "जमानत" करने के लिए संभव है, लेकिन यह आम तौर पर स्काला में मुहावरेदार दृष्टिकोण (मामलों को छोड़कर, जिनमें वाकई एक उचित डिफ़ॉल्ट मान है) नहीं है।
स्रोत
2013-11-04 10:40:34
+1। –