वैश्विक चर हैं चर जो कि गुंजाइश की परवाह किए बिना कार्यक्रम में कहीं से भी पहुँचा जा सकता है। वे एक $ (डॉलर चिह्न) चरित्र के साथ शुरुआत करके निरूपित किए जाते हैं। हालांकि, वैश्विक चर का उपयोग अक्सर "अन-रूबी" माना जाता है और आप शायद ही कभी उन्हें देखेंगे।
ग्लोबल वेरिएबल्स को परिभाषित करना
वैश्विक चर किसी अन्य चर की तरह परिभाषित और उपयोग किए जाते हैं। उन्हें परिभाषित करने के लिए, बस उन्हें एक मान निर्दिष्ट करें और उनका उपयोग करना शुरू करें। लेकिन, जैसा कि उनके नाम से पता चलता है, कार्यक्रम में किसी भी बिंदु से वैश्विक चर को असाइन करने के वैश्विक निहितार्थ हैं। निम्नलिखित कार्यक्रम यह प्रदर्शित करता है। विधि एक वैश्विक चर को संशोधित करेगी, और यह प्रभावित करेगा कि कैसे दूसरा विधि चलती है।
$ गति = 10। डिफ स्पीड। $ गति = 100। समाप्त। def pass_speed_trap अगर $ गति> 65 # कार्यक्रम को तेजी से टिकट दें। समाप्त। समाप्त। में तेजी लाने के। pass_speed_trap।
अप्रसिद्ध
तो यह "अन-रूबी" क्यों है और आप बहुत बार वैश्विक चर क्यों नहीं देखते हैं? सीधे शब्दों में कहें, यह एनकैप्सुलेशन को तोड़ता है। यदि कोई एक वर्ग या विधि किसी भी इंटरफ़ेस परत के साथ वैश्विक चर की स्थिति को संशोधित कर सकती है, तो कोई भी अन्य वर्ग या विधियाँ जो उस वैश्विक चर पर निर्भर करती हैं, अप्रत्याशित और अवांछनीय व्यवहार कर सकती हैं तौर तरीका। इसके अलावा, ऐसे इंटरैक्शन को डीबग करना बहुत मुश्किल हो सकता है। क्या है कि वैश्विक चर और कब संशोधित? आप यह पता लगाने के लिए काफी कोड के माध्यम से देख रहे होंगे कि उसने क्या किया, और जो कि एनकैप्सुलेशन के नियमों को नहीं तोड़ने से बचा जा सकता था।
लेकिन यह कहना नहीं है कि वैश्विक चर हैं कभी नहीँ रूबी में इस्तेमाल किया। एकल-वर्ण नाम (ए-ला) के साथ कई विशेष वैश्विक चर हैं पर्ल) जो आपके पूरे कार्यक्रम में उपयोग किया जा सकता है। वे स्वयं कार्यक्रम की स्थिति का प्रतिनिधित्व करते हैं, और सभी के लिए रिकॉर्ड और फ़ील्ड विभाजकों को संशोधित करने जैसी चीजें करते हैं हो जाता है तरीकों।
सार्वत्रिक चर
- $0 - यह चर, $ 0 (जो कि एक शून्य है) द्वारा निरूपित किया गया है, शीर्ष-स्तरीय स्क्रिप्ट का नाम निष्पादित किया जा रहा है। दूसरे शब्दों में, स्क्रिप्ट फ़ाइल जिसे से चलाया गया था कमांड लाइननहीं, स्क्रिप्ट फ़ाइल जो वर्तमान में निष्पादित कोड रखती है। तो अगर script1.rb कमांड लाइन से चलाया गया था, यह धारण करेगा script1.rb. यदि इस स्क्रिप्ट की आवश्यकता है script2.rb, उस स्क्रिप्ट फ़ाइल में $ 0 भी होगा script1.rb. $ 0 का नाम उसी उद्देश्य के लिए UNIX शेल स्क्रिप्टिंग में उपयोग किए गए नामकरण सम्मेलन को दर्शाता है।
- $* - $ * (डॉलर चिह्न और तारांकन) द्वारा निरूपित सरणी में कमांड-लाइन तर्क। उदाहरण के लिए, यदि आप दौड़ रहे थे ./script.rb arg1 arg2, तो $ * के बराबर होगा % w {arg1 arg2}. यह विशेष के बराबर है ARGV सरणी और कम वर्णनात्मक नाम है, इसलिए इसका उपयोग शायद ही कभी किया जाता है।
- $$ - दुभाषिया की प्रक्रिया आईडी, $ $ (दो डॉलर के संकेत) द्वारा निरूपित। किसी की खुद की प्रोसेस आईडी जानना अक्सर डेमॉन प्रोग्राम्स (जो किसी भी टर्मिनल से अनअटैच्ड होता है) या सिस्टम सर्विसेज में उपयोगी होता है। हालांकि, थ्रेड्स शामिल होने पर यह थोड़ा अधिक जटिल हो जाता है, इसलिए इसे आँख बंद करके उपयोग करने से सावधान रहें।
- $ / और $ \ - ये इनपुट और आउटपुट रिकॉर्ड सेपरेटर हैं। जब आप वस्तुओं का उपयोग करके पढ़ते हैं हो जाता है और उनका उपयोग करके प्रिंट करें डालता है, यह जानने के लिए इनका उपयोग करता है जब एक पूरा "रिकॉर्ड" पढ़ा गया है, या कई रिकॉर्ड के बीच क्या प्रिंट करना है। डिफ़ॉल्ट रूप से, ये न्यूलाइन वर्ण होना चाहिए। लेकिन चूंकि ये सभी IO वस्तुओं के व्यवहार को प्रभावित करते हैं, वे शायद ही कभी उपयोग किए जाते हैं, यदि सभी। आप उन्हें छोटी स्क्रिप्ट में देख सकते हैं, जहां एनकैप्सुलेशन नियमों को तोड़ना कोई समस्या नहीं है।
- $? - निष्पादित अंतिम बाल प्रक्रिया की निकास स्थिति। यहां सूचीबद्ध सभी चर में से, यह संभवतः सबसे उपयोगी है। इसका कारण सरल है: आप बच्चों की वापसी की स्थिति को उनके वापसी मूल्य से प्राप्त नहीं कर सकते प्रणाली विधि, केवल सही या गलत। यदि आपको बच्चे की प्रक्रिया का वास्तविक रिटर्न मूल्य पता होना चाहिए, तो आपको इस विशेष वैश्विक चर का उपयोग करने की आवश्यकता है। फिर, इस चर का नाम UNIX गोले से लिया गया है।
- $_ - द्वारा पढ़ा गया अंतिम तार हो जाता है. यह वैरिएबल रूबी के लिए पर्ल से आने वालों के लिए उलझन का विषय हो सकता है। पर्ल में, $ _ चर कुछ इसी तरह का मतलब है, लेकिन पूरी तरह से अलग है। पर्ल में, $_ पिछले कथन का मान रखता है और रूबी में यह पिछले द्वारा लौटाए गए स्ट्रिंग को रखता है हो जाता है मंगलाचरण। उनका उपयोग समान है, लेकिन वे वास्तव में जो पकड़ते हैं वह बहुत अलग है। आप अक्सर इस चर को नहीं देखते हैं (इसके बारे में सोचें, आप शायद ही इनमें से किसी भी चर को देखते हैं), लेकिन आप उन्हें बहुत कम रूबी कार्यक्रमों में देख सकते हैं जो पाठ को संसाधित करते हैं।
संक्षेप में, आप शायद ही कभी वैश्विक चर देखेंगे। वे अक्सर खराब रूप (और "अन-रूबी") होते हैं और केवल बहुत छोटी लिपियों में ही उपयोगी होते हैं, जहां उनके उपयोग के पूर्ण निहितार्थ को पूरी तरह से सराहा जा सकता है। कुछ विशेष वैश्विक चर हैं जिनका उपयोग किया जा सकता है, लेकिन अधिकांश भाग के लिए, उनका उपयोग नहीं किया जाता है। आपको वास्तव में सभी रूबी कार्यक्रमों को समझने के लिए वैश्विक चर के बारे में बहुत कुछ जानने की आवश्यकता नहीं है, लेकिन आपको कम से कम यह जानना चाहिए कि वे वहां हैं।