रूबी कमांड लाइन विकल्प, विकल्पपर्सर को पार्स करने के लिए एक शक्तिशाली और लचीले उपकरण से सुसज्जित है। एक बार जब आप इसका उपयोग करना सीख जाते हैं, तो आप ARGV के माध्यम से मैन्युअल रूप से देखने में कभी पीछे नहीं हटेंगे। OptionParser में कई विशेषताएं हैं जो इसे रूबी प्रोग्रामर के लिए काफी आकर्षक बनाती हैं। यदि आपने कभी भी रूबी या सी में, या के साथ विकल्पों को पार्स किया है getoptlong सी फ़ंक्शन, आप देखेंगे कि इन परिवर्तनों में से कुछ कैसे स्वागत करते हैं।
- OptionParser है सूखी. आपको केवल कमांड-लाइन स्विच, उसके तर्क, उसके सामने आने पर चलने वाला कोड और आपकी स्क्रिप्ट में एक बार कमांड-लाइन स्विच विवरण लिखना होगा। OptionParser इस विवरण से स्वचालित रूप से आपके लिए सहायता स्क्रीन उत्पन्न करेगा, साथ ही इसके विवरण से तर्क के बारे में सब कुछ पता लगाएगा। उदाहरण के लिए, यह पता चल जाएगा --फाइल [फ़ाइल] विकल्प वैकल्पिक है और एकल तर्क लेता है। इसके अलावा, यह पता चल जाएगा कि - [- कोई] -verbose वास्तव में दो विकल्प हैं और दोनों रूपों को स्वीकार करेंगे।
- OptionParser स्वचालित रूप से विकल्पों को एक विशिष्ट वर्ग में बदल देगा। यदि विकल्प पूर्णांक लेता है, तो यह कमांड-लाइन पर पारित किसी भी स्ट्रिंग को पूर्णांक में बदल सकता है। यह कमांड-लाइन विकल्पों को पार्स करने में शामिल कुछ टेडियम पर कटौती करता है।
- सब कुछ बहुत समाहित है। सभी विकल्प एक ही स्थान पर हैं, और विकल्प का प्रभाव विकल्प के साथ-साथ सही है। यदि विकल्पों को जोड़ना, बदलना या कोई व्यक्ति बस यह देखना चाहता है कि वे क्या करते हैं, तो देखने के लिए केवल एक जगह है। एक बार कमांड-लाइन पार्स हो जाने के बाद, एक ही हैश या ओपनस्ट्रोस्ट परिणाम देगा।
पहले से ही, मुझे कुछ कोड दिखाएं
तो यहाँ कैसे उपयोग करने के लिए एक सरल उदाहरण है OptionParser. यह किसी भी उन्नत सुविधाओं का उपयोग नहीं करता है, बस मूल बातें। तीन विकल्प हैं, और उनमें से एक पैरामीटर लेता है। सभी विकल्प अनिवार्य हैं। वहाँ हैं -v / - वर्बोज़ तथा -q / - त्वरित विकल्प, साथ ही साथ -l / - logfile फ़ाइल विकल्प। इसके अतिरिक्त, स्क्रिप्ट विकल्पों से स्वतंत्र फाइलों की एक सूची लेती है।
#! / usr / bin / env माणिक
# एक स्क्रिप्ट जो कई छवियों का आकार बदलने का नाटक करेगी
'ऑप्टपर्स' की आवश्यकता
# यह हैश सभी विकल्पों को धारण करेगा
# कमांड-लाइन से पार्स किया गया
# OptionParser।
विकल्प = {}
Optparse = OptionParser.new do | opts |
# शीर्ष पर प्रदर्शित एक बैनर सेट करें
# मदद स्क्रीन के।
opts.banner = "उपयोग: Optparse1.rb [विकल्प] file1 file2 ..."
# विकल्पों को परिभाषित करें, और वे क्या करते हैं
विकल्प [: क्रिया] = गलत
opts.on ('-v', '--verbose', 'Output more information') करते हैं
विकल्प [: क्रिया] = सच
समाप्त
विकल्प [: जल्दी] = गलत
opts.on ('-q', '--quick', 'जल्दी से कार्य निष्पादित करें') करते हैं
विकल्प [: त्वरित] = सत्य
समाप्त
विकल्प [: logfile] = नील
opts.on ('-l', '--logfile FILE', 'Log to FILE') do do file |
विकल्प [: logfile] = फ़ाइल
समाप्त
# यह मदद स्क्रीन प्रदर्शित करता है, सभी कार्यक्रम हैं
# यह विकल्प माना जाता है।
opts.on ('-h', '--help', 'Display this screen') करते हैं
ऑप्स डालता है
बाहर जाएं
समाप्त
समाप्त
# कमांड-लाइन को पार्स करें। याद रखें कि दो रूप हैं
# तोते की विधि। The पार्स ’विधि बस पर्स निकालती है
# ARGV, जबकि 'पार्स!' पद्धति ARGV को पार्स करती है और हटाती है
# किसी भी विकल्प वहाँ, साथ ही किसी भी पैरामीटर के लिए
# विकल्प। जो कुछ बचा है वह आकार बदलने के लिए फाइलों की सूची है।
optparse.parse!
यदि विकल्प [: क्रिया]
विकल्प होने पर "त्वरित होना" कहते हैं: [त्वरित]
"लॉगिंग # फाइल करने के लिए {विकल्प [: logfile]}" अगर विकल्प [: logfile]
ARGV.each करो | f |
"आकार बदलने वाली छवि # {f} ..."
नींद ०.५
समाप्त
कोड की जांच करना
के साथ शुरू करने के लिए, optparse पुस्तकालय की आवश्यकता है। याद रखें, यह एक नहीं है मणि. यह रूबी के साथ आता है, इसलिए मणि स्थापित करने या आवश्यकता की आवश्यकता नहीं है rubygems इससे पहले optparse.
इस लिपि में दो रोचक वस्तुएं हैं। पहला है विकल्प, शीर्ष-सबसे अधिक गुंजाइश पर घोषित किया गया। यह एक साधारण खाली है हैश. जब विकल्प परिभाषित होते हैं, तो वे इस हैश के लिए अपने डिफ़ॉल्ट मान लिखते हैं। उदाहरण के लिए, डिफ़ॉल्ट स्क्रिप्ट इस स्क्रिप्ट के लिए है नहीं क्रिया हो, इसलिए विकल्प [: वर्बोज़] असत्य पर सेट है। जब कमांड-लाइन पर विकल्प सामने आते हैं, तो वे मानों को बदल देंगे विकल्प उनके प्रभाव को प्रतिबिंबित करने के लिए। उदाहरण के लिए, जब -v / - वर्बोज़ सामना किया गया है, यह सच को असाइन करेगा विकल्प [: वर्बोज़].
दूसरी रोचक वस्तु है optparse. यह है OptionParser वस्तु ही। जब आप इस ऑब्जेक्ट का निर्माण करते हैं, तो आप इसे एक ब्लॉक पास करते हैं। यह ब्लॉक निर्माण के दौरान चलाया जाता है और आंतरिक डेटा संरचनाओं में विकल्पों की एक सूची का निर्माण करेगा, और सब कुछ पार्स करने के लिए तैयार हो जाएगा। यह इस ब्लॉक में है कि सभी जादू होता है। आप यहां सभी विकल्पों को परिभाषित करते हैं।
विकल्प परिभाषित करना
प्रत्येक विकल्प समान पैटर्न का अनुसरण करता है। आप पहले डिफ़ॉल्ट मान हैश में लिखें। जैसे ही यह होगा OptionParser निर्माण किया है। इसके बाद, आप कॉल करें परतरीका, जो विकल्प को ही परिभाषित करता है। इस पद्धति के कई रूप हैं, लेकिन यहां केवल एक का उपयोग किया जाता है। अन्य रूप आपको स्वचालित प्रकार के रूपांतरणों को परिभाषित करने की अनुमति देते हैं और मूल्यों का सेट एक विकल्प प्रतिबंधित है। यहां इस्तेमाल किए गए तीन तर्क संक्षिप्त रूप, लंबे रूप और विकल्प का विवरण हैं।
पर विधि लंबे समय से कई चीजों का अनुमान लगाएगी। एक बात का अनुमान लगाना किसी भी पैरामीटर की उपस्थिति है। यदि विकल्प पर कोई पैरामीटर मौजूद है, तो यह उन्हें ब्लॉक के मापदंडों के रूप में पारित करेगा।
यदि कमांड-लाइन पर विकल्प का सामना करना पड़ता है, तो ब्लॉक को पास कर दिया जाता है पर तरीका चलाया जाता है। यहाँ, ब्लॉक ज्यादा नहीं करते हैं, वे सिर्फ विकल्प हैश में मान सेट करते हैं। अधिक किया जा सकता है, जैसे कि जाँच करना कि एक फ़ाइल मौजूद है, आदि। यदि कोई त्रुटि है, तो अपवाद इन ब्लॉकों से फेंका जा सकता है।
अंत में, कमांड-लाइन पार्स की गई है। ऐसा कॉल करने से होता है पार्स! ए पर विधि OptionParser वस्तु। वास्तव में इस पद्धति के दो रूप हैं, पार्स तथा पार्स!. विस्मयादिबोधक बिंदु के साथ संस्करण का अर्थ है, यह विनाशकारी है। यह न केवल कमांड-लाइन को पार्स करता है, बल्कि इससे मिलने वाले किसी भी विकल्प को हटा देगा ARGV. यह एक महत्वपूर्ण बात है, यह केवल विकल्पों में दी गई फ़ाइलों की सूची को छोड़ देगा ARGV.