रूबी दुभाषिया एक प्रोग्राम है जो रूबी कोड को पढ़ता और चलाता है।
लेकिन…
क्या आप जानते हैं कि डिफ़ॉल्ट रूबी दुभाषिया (एमआरआई) में बहुत सारे दिलचस्प और उपयोगी कमांड-लाइन विकल्प हैं?
पसंद करें :
ruby -v
जो आपको रूबी का वह संस्करण देता है जिसका आप अभी उपयोग कर रहे हैं।
या -e
ध्वज जो आपको फ़ाइल के बिना और irb
में जाने के बिना, सीधे थोड़ा सा कोड चलाने की अनुमति देता है ।
इसे पसंद करें :
ruby -e 'puts 123'
आप -h
. का उपयोग करके इन झंडों को ढूंढ सकते हैं ।
कुछ "छिपे हुए" झंडे हैं जिन्हें आप केवल --help
. के साथ देख सकते हैं ।
मेरे विचार से ये एक तालिका है...
सबसे दिलचस्प झंडे :
Flag | विवरण |
---|---|
-v | रूबी संस्करण प्रिंट करें |
-c | सिंटैक्स जांच |
-e | कोड सीधे चलाएँ |
-w | चेतावनी सक्षम करें |
-r | एक फ़ाइल / रत्न की आवश्यकता है |
-I | लोड पथ में निर्देशिका जोड़ें |
–फ्रोजन-स्ट्रिंग-शाब्दिक सक्षम करें | सभी स्ट्रिंग्स को फ़्रीज़ करें |
–dump parsetree | पार्स ट्री दिखाएं |
आइए इनमें से कुछ झंडों पर ध्यान दें कि वे कैसे काम करते हैं!
सिंटैक्स जांच
यदि आपके पास कोड है और आप जानना चाहते हैं कि क्या सिंटैक्स सही है तो आप -c
. का उपयोग कर सकते हैं सीएलआई विकल्प।
उदाहरण :
ruby -c code_without_syntax_errors.rb # Syntax OK ruby -c code_with_syntax_errors.rb # syntax error, unexpected tIDENTIFIER, expecting end-of-input
सरल, लेकिन यह काम करता है 🙂
त्वरित आवश्यकता
कभी-कभी आप अपनी फ़ाइल के शीर्ष पर "आवश्यकता" लिखे बिना रूबी प्रोग्राम में अस्थायी रूप से एक रत्न की आवश्यकता करना चाहते हैं।
डिबगिंग रत्न की तरह।
उदाहरण :
ruby -rpry code.rb
बहुत मददगार!
चेतावनी ध्वज
चेतावनी ध्वज का उपयोग करने से लाइनिंग सक्षम हो जाएगी और आपको अपने कोड के साथ संभावित समस्याएं दिखाई देंगी।
उदाहरण के लिए, यह कोड :
p @test
जब आप ruby -w
का उपयोग करते हैं तो निम्न चेतावनी प्रिंट करता है :
warning: instance variable @test not initialized
यह एक अच्छी चेतावनी है!
क्योंकि हो सकता है कि आप किसी आवृत्ति चर को पहले मान दिए बिना उसका उपयोग करने का प्रयास कर रहे हों।
या आपके पास एक आवृत्ति चर नाम में एक टाइपो हो सकता है, जो समस्या बनने से पहले यह ध्वज आपको ढूंढने में मदद कर सकता है।
समाधान आसान है :
@test = nil
यहां एक और उदाहरण दिया गया है:
c = 1
यह आपको देगा :
warning: assigned but unused variable - c
इस चेतावनी को ठीक करने के लिए आप या तो वेरिएबल को हटा सकते हैं या उसका उपयोग कर सकते हैं।
यह केवल स्थानीय चर . के लिए कार्य करता है ।
लेकिन आपको पता होना चाहिए कि ब्लॉक तर्कों के अंदर अप्रयुक्त तर्कों को अंडरस्कोर (_
से बदलने के लिए इसे "सर्वोत्तम अभ्यास" माना जाता है। )।
उदाहरण :
{ chocolate: 82 }.map { |k, _| k }
रूबी में यह एक आम परंपरा है।
_
विशेष नहीं है, यह केवल एक मान्य चर नाम होता है।
अधिक चेतावनी उदाहरण
निम्नलिखित कोड का परिणाम किसी विधि से वापस नहीं किया जा रहा है, या किसी चर को असाइन नहीं किया जा रहा है।
2 * 2
रूबी अलर्ट आपको यह पसंद है :
warning: possibly useless use of * in void context
सुधार?
बेकार स्टेटमेंट को डिलीट करें, या इसे एक वेरिएबल को असाइन करें।
अब इस विधि को देखें :
def orange(weight, quantity) # ... end
orange
. को कॉल करने के अलग-अलग तरीके हैं :
orange 100, 2 orange(100, 2) orange *[100, 2] orange(*[100, 2])
अगर आप orange *[100, 2]
. का इस्तेमाल करते हैं सक्षम चेतावनियों के साथ आपको यह मिलता है:
warning: '*' interpreted as argument prefix
क्या हो रहा है?
अस्पष्टता।
रूबी को लगता है कि आपका मतलब है orange * [100, 2]
, के बजाय orange *[100, 2]
।
*
. के बीच का स्थान और [
फर्क पड़ता है क्योंकि यह *
. को जोड़ता है सरणी (स्प्लैट ऑपरेटर) के साथ यदि यह गायब है, या यह सोचता है *
एक विधि कॉल है अगर यह मौजूद है।
तो हाँ, इस मामले में, स्थान मायने रखता है।
आप किसी अन्य तरीके से विधि को कॉल करके इस चेतावनी को ठीक कर सकते हैं।
अब :
-w
. के साथ अपना कुछ कोड चलाएँ कुछ चेतावनियों को हटाकर ध्वजांकित करें और इसे सुधारें 🙂
रीड-एवल-प्रिंट-लूप
आप शायद irb &pry से परिचित हैं, वे दोनों ही हैं जिन्हें हम आरईपीएल कहते हैं।
-n
का उपयोग करना -e
. के साथ संयुक्त ध्वज ध्वज आप बहुत कम कोड के साथ समान प्रभाव प्राप्त कर सकते हैं।
यहां एक उदाहरण दिया गया है :
echo 'bacon\nchocolate\norange' | ruby -ne 'puts $_.upcase' # BACON # CHOCOLATE # ORANGE
यह echo
. से इनपुट लेता है , फिर प्रत्येक पंक्ति के लिए यह आपके कोड को कॉल करता है (puts $_.upcase
)।
जहां $_
एक विशेष चर है जिसमें gets
. द्वारा पढ़ा गया अंतिम इनपुट मान होता है ।
फ्रोजन स्ट्रिंग लिटरल फ्लैग
रूबी 2.3 ने फ्रोजन स्ट्रिंग लिटरल "मैजिक कमेंट" पेश किया।
ऐसा दिखता है :
# frozen_string_literal: true
यह आपके सभी तार फ़्रीज़ कर देगा , उन्हें अपरिवर्तनीय बनाना (बदला नहीं जा सकता)।
ऐसा करने का दूसरा तरीका है --enable frozen-string-literal
. पास करना रूबी को झंडा।
यह कोड :
str = "abcdef" str[0] = "b"
जब आप उस ध्वज का उपयोग करते हैं तो इस त्रुटि का परिणाम होता है:
can't modify frozen String (FrozenError)
लेकिन क्या होगा अगर आपको स्ट्रिंग बदलने की ज़रूरत है?
तब आप यह कर सकते हैं :
str = "abcdef".dup
या यह :
str = +"abcdef"
दोनों आपको काम करने के लिए एक गैर-जमे हुए स्ट्रिंग देते हैं।
सारांश
आपने रूबी के कमांड-लाइन विकल्पों के बारे में सीखा है, जिसमें संस्करण ध्वज, चेतावनी ध्वज और जमे हुए स्ट्रिंग अक्षर शामिल हैं। ये सभी फ़्लैग उपयोगी हो सकते हैं, इन्हें आज़माएं!
इस लेख को साझा करना न भूलें ताकि अधिक से अधिक लोग इसका लाभ उठा सकें।
पढ़ने के लिए धन्यवाद