Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी दुभाषिया विकल्प और उनका सही उपयोग कैसे करें

रूबी दुभाषिया एक प्रोग्राम है जो रूबी कोड को पढ़ता और चलाता है।

लेकिन…

क्या आप जानते हैं कि डिफ़ॉल्ट रूबी दुभाषिया (एमआरआई) में बहुत सारे दिलचस्प और उपयोगी कमांड-लाइन विकल्प हैं?

पसंद करें :

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"

दोनों आपको काम करने के लिए एक गैर-जमे हुए स्ट्रिंग देते हैं।

सारांश

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

इस लेख को साझा करना न भूलें ताकि अधिक से अधिक लोग इसका लाभ उठा सकें।

पढ़ने के लिए धन्यवाद


  1. एक मैट्रिक्स क्या है और रूबी में इसका उपयोग कैसे करें?

    मैट्रिक्स एक 2डी (2-आयामी) सरणी है जिसका उपयोग स्प्रेडशीट जैसे डेटा को स्टोर और काम करने के लिए किया जा सकता है। उनका उपयोग इसके लिए किया जा सकता है : टेबल गेम (शतरंज, चेकर्स, आदि) में बोर्ड का प्रतिनिधित्व करना सांख्यिकी और डेटा विश्लेषण प्लॉट और ग्राफ़ बनाना चूंकि यह एक शक्तिशाली डेटा संरचना ह

  1. रूबी उपनाम कीवर्ड का उपयोग कैसे करें

    आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं: उपनाम (कीवर्ड) उपनाम_विधि क्योंकि वे एक ही काम को थोड़े अलग तरीके से करते हैं, यह एक भ्रमित करने वाला विषय हो सकता है। यह छवि मतभेदों का सारांश है : आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें! उपनाम कीवर्ड सबसे पहले

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

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