कभी-कभी x
को y
के समान प्रकार के घोषित करने की इच्छा हो सकती है। vals
प्रकार अनुमान इस तरह से संभालता है, लेकिन यह with function types जैसे कुछ अन्य क्षेत्रों में काम नहीं करता है।क्यों स्कैला में कोई गिरावट नहीं है?
कुछ समाधान जो कुछ सी ++ अनुभव वाले प्रोग्रामर के लिए स्पष्ट प्रतीत होता है वह decltype होगा। वर्तमान स्काला में ऐसी कोई सुविधा मौजूद नहीं है।
जुड़ा हुआ सवाल का उत्तर बताता है:
क्योंकि प्रकार प्रथम श्रेणी नागरिकों
मैं स्वीकार करने के लिए मुझे यह समझ में नहीं आता नहीं कर रहे हैं। मुझे नहीं लगता कि प्रकार सी ++ में प्रथम श्रेणी के नागरिक हैं, लेकिन फिर भी इसमें decltype
हो सकता है। मैं जेनरिक में टाइप पैरामीटर के लिए decltype
जैसे कुछ भी नहीं पूछ रहा हूं या ऐसा कुछ भी (मुझे लगता है कि जेनेरिक टेम्पलेट नहीं हैं और प्रकार उनमें मिटा दिए गए हैं)। फिर भी, मुझे लगता है कि एक ऑपरेटर जो मुझे एक प्रकार की अभिव्यक्ति का उपयोग करने की इजाजत देता है जहां एक प्रकार की अपेक्षा की जाती है - निश्चित रूप से संकलक एक अभिव्यक्ति प्रकार का मूल्यांकन करने में सक्षम होना चाहिए, अन्यथा val
परिभाषा के लिए अनुमान टाइप करना संभव नहीं होगा।
एक decltype
नीचे की तरह इस्तेमाल किया जा सकता है - कोड सिर्फ वाक्य रचना और मूल उपयोग वर्णन करने के लिए, कुछ भी कुछ भी उपयोगी करने के लिए कोशिश नहीं कर रहा है:
case class A(x:Int = 0)
val a = new A(10)
val b = new decltype(a)
def f(c:decltype(a)) : decltype(a.x+a.x)
, decltype
के अभाव एक विचार निर्णय है या कर रहे हैं वहाँ कुछ विशिष्ट कारण क्यों स्कैला के पास नहीं हो सकता है? क्या संकलन समय प्रतिबिंब का उपयोग कर शायद कुछ समाधान है जो इसकी अनुमति देगा?
कैसे 'b' खेलने में यहाँ आता है ? –
@ m-z b यहां एक उदाहरण के रूप में है। इस विशेष मामले में यह वैल बी = ए जैसा ही होगा, लेकिन कोई भी ऐसे मामले की आसानी से कल्पना कर सकता है जहां यह वही नहीं होगा। मैं सवाल को अद्यतन करने की कोशिश करूंगा। – Suma
मुझे प्रश्न समझ में नहीं आता है। प्रकार हस्ताक्षर समय संकलित कर रहे हैं, तो आप स्थिर रूप से प्रकार निर्दिष्ट करने में सक्षम होना चाहिए। फिर वह 'decltype' चीज़ आपको क्या देती है? नियमित 'वैल बी: ए = ए' और' डीफ़ एफ (सी: ए): ए' का "नुकसान" क्या है? –