दिलचस्प पोस्ट
सी # – विंडोज 64 बिट पर प्रोग्राम फाइल (एक्स 86) कैसे प्राप्त करें I अजगर: प्रोग्राम का एकल उदाहरण जावास्क्रिप्ट ऑब्जेक्ट की क्वेरी स्ट्रिंग एन्कोडिंग मैं पायथन के साथ वेबसाइट पर कैसे प्रवेश कर सकता हूँ? हिटिंग <name> .cmake एक कस्टम निर्देशिका के साथ फ़ाइलें Git: ऐतिहासिक प्रतिबद्धता से फ़ाइल को कैसे निकालना है? स्थिर और साझा पुस्तकालयों के बीच का अंतर? क्या SparkSQL का समर्थन करता है subquery? JQuery के .live ('click', fn) और .click (fn) के बीच प्रदर्शन अंतर एंड्रॉइड पर दो तरह प्रमाणन SSL सॉकेट के लिए क्लाइंट / सर्वर प्रमाणपत्र का उपयोग करना ए के एजेक्स टैग की घटना विशेषता को मैं कौन सा मान कर सकता हूं? सबसे ऊपर UIViewController प्राप्त करें PHP के DOM और SimpleXML एक्सटेंशन के बीच अंतर क्या है? रूबी में मैं एक हैश कैसे कॉपी करूँ? एक प्रोटोकॉल में केवल-प्राप्त संपत्ति की आवश्यकता क्यों नहीं है, जो एक संपत्ति से संतुष्ट होती है?

इम्प्लासिट टाइपिंग; क्यों सिर्फ स्थानीय चर?

क्या किसी को पता है या अटकलें लगाते हैं कि क्यों अंतर्निहित टाइपिंग स्थानीय चर तक सीमित है?

var thingy = new Foo(); 

पर क्यों नहीं…

 var getFoo() { return new Foo(); } 

वेब के समाधान से एकत्रित समाधान "इम्प्लासिट टाइपिंग; क्यों सिर्फ स्थानीय चर?"

एरिक लिपर ने इस विषय पर एक संपूर्ण ब्लॉग पोस्ट किया

संक्षेप में, मुख्य समस्या यह है कि ऐसा करने के लिए सी # संकलक के एक प्रमुख पुनः वास्तुकला की आवश्यकता होगी। घोषणाएं वर्तमान में एक ही पारित तरीके से संसाधित हैं अनुमानित चर के बीच चक्र बनाने की क्षमता की वजह से इसके पास कई पास की आवश्यकता होगी। VB.net मोटे तौर पर एक ही समस्या है

जेरेड के पास अपने जवाब में शानदार लिंक है, एक शानदार विषय है।

मुझे लगता है कि यह स्पष्ट रूप से सवाल का जवाब नहीं देता है

क्यों नहीं?

 var getFoo() { return new Foo(); } 

इसके लिए कारण है:

क्या हो अगर?

 class Foo {} var GetFoo() { return GetBar(); } var GetBar() { return GetBaz(); } var GetBaz() { return new Foo(); } 

आप यह GetFoo सकते हैं कि GetFoo Foo को वापस करने जा रहा है, लेकिन आपको विधि के सभी कॉलों के माध्यम से पता लगाना पड़ेगा और इसके बच्चे केवल प्रकार का अनुमान लगाने के लिए तैयार होंगे। जैसा कि यह है कि सी # संकलक इस तरह से काम करने के लिए तैयार नहीं है इस प्रक्रिया में प्रारंभिक कोड और क्षेत्र प्रकार की आवश्यकता होती है, जो कि कोड को चलाने से पहले चला सकता है।

विशुद्ध रूप से सौंदर्य स्तर पर मैं तरीकों पर भ्रम की परिभाषाओं को भ्रमित करता हूं। इसकी एक जगह है जहां मुझे स्पष्ट रूप से हमेशा मदद मिलती है, यह आपको गलती से एक प्रकार से लौटने से पैर में अपने आत्म शूटिंग करने से बचाता है जो आपके हस्ताक्षर का कारण बनता है और एक अन्य शत प्रतिशत निर्भरता हस्ताक्षर को बदलना है। सबसे बुरे हालात में, आप किसी विधि श्रृंखला के आपके सभी हस्ताक्षर को संभवतः बदले में भी जान सकते हैं, अगर आप उस विधि के मूल्य को वापस करते हैं जो कि वस्तु का रिटर्न देता है और भाग्यशाली हो जाता है

मुझे लगता है कि रूबी की तरह गतिशील भाषाओं जैसे विभिन्न तरीकों को छोड़ दिया जाता है

क्योंकि यह करने के लिए बहुत आसान है यदि आप सभी प्रकार के अनुमानों के लिए होते हैं, तो आपको हिंडले मिल्नेर टाइप इंफॉर्मेशन सिस्टम की कुछ आवश्यकता होगी जो आपकी प्रिय सी # को हास्केल व्युत्पन्न भाषा में बना देगा।

अनिवार्य रूप से, आप जो मुद्दे पर चल रहे हैं वह है सी # (इस प्रकार अब तक) एक स्थैतिक रूप से टाइप की गई भाषा है एक स्थानीय वैरिएबल जिसे var के रूप में परिभाषित किया गया है अभी भी स्थिर रूप से टाइप किया गया है, लेकिन वाक्यविन्यास छिपा हुआ है। दूसरी ओर, जिस पर लौटने वाला तरीका है, उसके पास कई प्रभाव हैं। यह उपयोग के लिए एक इंटरफ़ेस का अधिक हो जाता है, और आप var का उपयोग करके कुछ भी प्राप्त नहीं करते हैं

आप बनाम 2010 गतिशील में बना सकते हैं

 Dynamic getFoo() { return new Foo(); } 

मुझे लगता है कि ऐसा इसलिए है क्योंकि उस निहित प्रकार का दायरा बहुत व्यापक है और इसलिए एक ही विधि के दायरे के मुकाबले समस्याओं का कारण होने की अधिक संभावना है।