मैं एक इंट को यह डाली है कैसे और नहीं Some(Int)
कास्ट विकल्प [कोई]
val a: Option[Any] = Some(1)
मैं toInt
की कोशिश की और यह .asInstanceOf
पद्धति का उपयोग करना एक त्रुटि value toInt is not a member of Option[Any]
मैं एक इंट को यह डाली है कैसे और नहीं Some(Int)
कास्ट विकल्प [कोई]
val a: Option[Any] = Some(1)
मैं toInt
की कोशिश की और यह .asInstanceOf
पद्धति का उपयोग करना एक त्रुटि value toInt is not a member of Option[Any]
आप a.get.asInstanceOf[Int]
कर सकते हैं हालांकि यह असुरक्षित है। Option[Any]
के बजाय Option[Int]
का उपयोग करके टाइप जानकारी को बनाए रखने का एक बेहतर तरीका होगा। तो आपको asInstanceOf
के साथ परिणाम डालने की आवश्यकता नहीं होगी।
val a:Option[Int] = Some(1)
val i = a.get
get
का उपयोग करते हुए सीधे असुरक्षित के बाद से यदि Option
एक None
है एक अपवाद फेंका जाता है। तो getOrElse
का उपयोग करना सुरक्षित है। या आप मूल्य प्राप्त करने के लिए a
पर पैटर्न मिलान का उपयोग कर सकते हैं।
val a:Option[Any] = Some(1) // Note using Any here
val i = (a match {
case Some(x:Int) => x // this extracts the value in a as an Int
case _ => Int.MinValue
})
दिया int करने के लिए
a.getOrElse(0).asInstanceOf[Int]
मुझे यह ध्यान रखना होगा कि यह असुरक्षित कास्ट है: यदि आपके विकल्प में Int नहीं है, तो आपको दौड़ मिल जाएगी आईम अपवाद।
कारण यह है कि आप इसे क्यों नहीं डाल सकते हैं क्योंकि आपको कास्ट नहीं करना है। जबकि स्थैतिक टाइप की गई प्रोग्रामिंग भाषाएं आपको एक प्रकार और दूसरे के बीच मैन्युअल रूप से डालने की अनुमति देती हैं, सबसे अच्छा सुझाव जो मैं आपको दे सकता हूं वह इस विशेषताओं को भूलना है।
विशेष रूप से, यदि आप प्रत्येक प्रोग्रामिंग भाषा का सर्वोत्तम लाभ उठाना चाहते हैं, तो उचित उपयोगकर्ता बनाने का प्रयास करें, और यदि कोई भाषा उपयोग में फिट नहीं है तो आप केवल एक और चुन सकते हैं (जैसे गतिशील रूप से टाइप किया गया) :
यदि आप कर आप एक संभावित संकलन समय त्रुटि, बारी डाले जो हम क्योंकि इसे हल करने के लिए आसान है, एक ClassCastException है, जो हम पसंद नहीं है क्योंकि यह क्रम पर होता है में की तरह। यदि आपको स्कैला में कास्ट का उपयोग करने की आवश्यकता है, तो शायद आप एक अनुचित पैटर्न का उपयोग कर रहे हैं।
या आप जावा पुस्तकालयों का उपयोग कर रहे हैं (बुरी तरह से डिजाइन किए गए) ... – ziggystar
जबकि मैं भावनाओं की सराहना करता हूं, वास्तविक जीवन परियोजनाओं में, चीजें हमेशा काले और सफेद नहीं होती हैं। ऐसा करने के लिए मेरे लिए एक वैध आवश्यकता है क्योंकि यह अंतर्निहित तृतीय पक्ष एपीआई द्वारा लौटाए गए 4 प्रकारों में से एक हो सकता है। – Bob
यह एक बहुत कमजोर तंत्र है। आप शायद बेहतर पैटर्न के साथ ऐसा ही कर सकते हैं ... आप यह समझाने की कोशिश क्यों नहीं करते कि आप क्या करना चाहते हैं? – Edmondo1984
कास्टिंग के बारे में थोड़ा भूल जाओ; पैटर्न मेलिंग स्पष्ट रूप से –
जाने का तरीका है I सहमत हैं। पैटर्न मिलान बहुत शक्तिशाली और भयानक है :) –