अगर बयान रूबी 1.9 में गुंजाइश नहीं पेश करते हैं , तो रूबी 1.8 से इस बदलाव के पीछे तर्क क्या है?
अगर बयान रूबी 1.9 में गुंजाइश नहीं पेश करते हैं , तो रूबी 1.8 से इस बदलाव के पीछे तर्क क्या है?
जवाबों:
रूबी 1.9 में ऐसा करने के दो कारण निम्नलिखित स्लाइड्स पर हैं, हालांकि यह प्रस्तुतकर्ता के संवाद के बिना स्पष्ट नहीं हो सकता है। दो चीजें जो कोई गुंजाइश if
बयान नहीं करती हैं, वे आपको अपने स्रोत कोड में उन चीजों को परिभाषित करने की अनुमति देती हैं, जिन्हें अगर कथन के बाहर एक्सेस किया जा सकता है।
पहला उदाहरण: तरीकों को बदलें
class Employee
if String.method_defined?(:encode)
def name
...
end
else
def name
...
end
end
end
इस उदाहरण में, विधि के लिए दो अलग-अलग परिभाषाएं हैंname
। यदि String.encode
विधि मौजूद है, तो एक का उपयोग किया जाएगा , और एक (अवर कार्यान्वयन) जो कि एनकोड विधि मौजूद नहीं होने पर उपयोग किया जाएगा। अनिवार्य रूप से, यह आपको सही ढंग से एन्कोड किए गए स्ट्रिंग का उपयोग करने की अनुमति देता है यदि पुस्तकालय इसका समर्थन करते हैं।
दूसरा उदाहरण: कार्यान्वयन को प्रतिस्थापित करें
if String.method_defined?(:encode)
module Builder
...
end
else
class String
...
end
end
इस उदाहरण में, हम एक पूरी तरह से अलग वर्ग / मॉड्यूल प्रदान कर रहे हैं, जो इस बात पर निर्भर करता है कि क्या लाइब्रेरी सुविधा मौजूद है। यह आपको एक पूरी तरह से अलग एल्गोरिथ्म रखने की अनुमति देता है जो एक नई लाइब्रेरी सुविधा का उपयोग करता है जबकि अभी भी कम कुशल या पूर्ण एल्गोरिथ्म में वापस आ रहा है जो मौजूद नहीं होने पर पर्याप्त करीब है।
सभी महत्वपूर्ण क्यों
तो यह आपको क्या खरीदता है? यदि if
कथन ने एक नया दायरा पेश किया है, तो नया तरीका या वर्ग केवल मौजूद होगा और if
बयान की सीमा के भीतर उपयोग किया जाएगा । उस बाधा को एक पुस्तकालय का समर्थन करना बहुत मुश्किल हो जाता है जिसे रूबी 2.0 के लिए परिवर्तनों की आवश्यकता होगी क्योंकि हम भविष्य में 1.9 से दूर चले जाते हैं।
आपके द्वारा लिंक की गई प्रस्तुति में दिए गए दोनों उदाहरणों के साथ, तर्क यह है कि रूबी के कई संस्करणों का समर्थन करते हुए भी अपने पुस्तकालयों के लिए एक कोडबेस बनाए रखें। मेरा मानना है कि यह रूबी 1.8 और रूबी 1.9 के बीच संक्रमण के दर्द से पैदा हुआ था। चूंकि रूबी टीम लगातार 2.0 की ओर अग्रसर है, आप असंगत परिवर्तन होने पर भी अपने उपयोगकर्ताओं का समर्थन कर सकेंगे। मेरा मानना है कि 1.9.1 और 1.9.2 के बीच कुछ थे। भविष्य में और भी बहुत कुछ होगा।
मैं कोई विशेषज्ञ नहीं हूँ, लेकिन अगर आप रूबी के बारे में अक्सर पूछे जाने वाले प्रश्न यहाँ देखें : http://arc.apotheon.org/ruby/faq/rubyfaq-2.php
धारा 2.3 "एक स्थानीय चर कब सुलभ होता है?" वर्तमान व्यवहार दिखाता है।
स्कूपिंग मुद्दे के इर्द-गिर्द घूमने के लिए, कुछ "हैकी" चीजों में से एक जो आपको वर्तमान में करना है:
आपको स्थानीय वेरिएबल के इस तरह के व्यवहार से परेशान नहीं होने के लिए स्थानीय वेरिएबल तक पहुंचने से पहले = एनआईएल की तरह असाइनमेंट स्टेटमेंट डालने की सिफारिश की जाती है।
मेरा मानना है कि 1.9 ऐसा करने की आवश्यकता को हटा देगा, और यह नए व्यवहार के लिए ड्राइवरों में से एक हो सकता है।