2016-01-02 10 views
9

रुबी के पास वैश्विक चर जैसे $$ क्यों हैं?रूबी ग्लोबल्स क्या उपयोगी हैं?

Kernel में एक्सेसर्स और विशेषताओं को परिभाषित करके समान व्यवहार प्राप्त नहीं किया जा सका?

क्या यह सबक्लास में ओवरराइडिंग को रोकने के लिए है?

+2

क्या आप विशेष रूप से [विशेष ग्लोबल्स] (http://jimneath.org/2010/01/04/cryptic-ruby-global-variables-and-their-meanings.html) के बारे में पूछ रहे हैं जैसे '$$' आदि या आम तौर पर वैश्विक चर के बारे में? स्पेशल ग्लोबल्स रूबी के प्रभावों में से एक हैं जो पर्ल से आते हैं और वास्तव में एक ही जानकारी ('$$ 'के मामले में' Process.id') प्राप्त करने के वैकल्पिक तरीके हैं, जिन्हें इन दिनों प्राथमिकता दी जाएगी। – mikej

+0

ग्लोबल्स आम तौर पर, हालांकि $$, $ 0 आदि का अस्तित्व उनके उपयोग को मंजूरी दे रहा है। –

+2

हां, कर्नेल पर विधियों (एक्सेसर्स) को परिभाषित करके समान व्यवहार प्राप्त किया जा सकता है, लेकिन स्पष्ट "राज्य" स्पष्ट नहीं है, "समान नहीं है।" एक बात के लिए, रूबी में विधि कॉल महंगी होती है, कम से कम एक वैश्विक चर तक पहुंचने की तुलना में। –

उत्तर

0

इस प्रश्न में कई भागों हैं और इसलिए उत्तर हैं।

क्यू 1।

रुबी के पास $$ जैसे वैश्विक चर क्यों हैं?

रूल और एलआईएसपी से रुबी बोरो। दोनों में वैश्विक चर हैं।

रूबी ने को एक ही चीज़ करने के लिए एक से अधिक तरीके होने के पर्ल दर्शन को विरासत में मिला। यूकिहिरो मैट्सुमोटो - 29 सितंबर, 2003

Q2।

एक्सेसर्स और कर्नेल में विशेषताओं को परिभाषित करके समान व्यवहार प्राप्त नहीं किया जा सका?

हाँ, और वे हैं। हालांकि यह माना जा सकता है कि प्रोग्राम किए गए मूल्य मौजूद हैं जिनके पास वैश्विक प्रयोज्यता है और इसलिए किसी भी मध्यस्थ कोड को शुरू किए बिना वैश्विक क्षेत्र होना चाहिए।

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

क्यू 3।

क्या यह सबक्लास में ओवरराइडिंग को रोकने के लिए है?

इसका उत्तर मुझे अज्ञात है।

अंत में, हम आने के लिए प्रश्न शीर्षक में पूछा क्या है:

रूबी वैश्विक के लिए उपयोगी होते हैं?

trace_var :$_, proc {|v| puts "$_ is now '#{v}'" } 
$_ = "hello" 
$_ = ' there' 

आउटपुट STDOUT करने के लिए:

$_ is now 'hello' 
$_ is now ' there' 

एक जो करने के लिए कुछ कार्यक्रम चालित बदल गया है एक आवेदन के गर्भ धारण कर सकते हैं

एक trace_var कर्नेल विधि के माध्यम से रूबी में चर असाइनमेंट ट्रेस कर सकते हैं $ राज्य नामक एक वैरिएबल, एक जीयूआई या सेंसर फीड कहें, जहां वैश्विक चर में परिवर्तन का पता लगाने के लिए अनिवार्य रूप से एक ही सुविधा को लागू करने वाले प्रोग्राम कोड की आवश्यकता को समाप्त कर दिया जाता है।

संबंधित मुद्दे