खोज…


परिचय

OptionParser का उपयोग ARGV से कमांड लाइन विकल्पों को पार्स करने के लिए किया जा सकता है।

अनिवार्य और वैकल्पिक कमांड लाइन विकल्प

यदि आप कुछ भी जटिल नहीं देख रहे हैं तो हाथ से कमांड लाइन को पार करना अपेक्षाकृत आसान है:

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

लेकिन जब आपके विकल्प अधिक जटिल होने लगते हैं, तो आपको संभवतः विकल्प पार्सर का उपयोग करने की आवश्यकता होगी जैसे, विकल्प, विकल्प :

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

यदि आप ARGV में शेष के उपयोग की योजना बनाते हैं, तो यह एक गैर-विनाशकारी parse , लेकिन यह बहुत कम उपयोगी है।

OptionParser वर्ग के पास अनिवार्य तर्कों को लागू करने का कोई तरीका नहीं है (जैसे - इस मामले में --site )। हालाँकि आप parse! चलाने के बाद खुद की जाँच कर सकते हैं parse! :

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

अधिक सामान्य अनिवार्य विकल्प हैंडलर के लिए, यह उत्तर देखें। यदि यह स्पष्ट नहीं है, तो सभी विकल्प वैकल्पिक हैं जब तक कि आप उन्हें अनिवार्य बनाने के लिए अपने रास्ते से बाहर नहीं जाते हैं।

डिफ़ॉल्ट मान

OptionsParser साथ, डिफ़ॉल्ट मान सेट करना वास्तव में आसान है। आप जिन विकल्पों को स्टोर करते हैं, उनमें बस पहले से हैश पॉप-अप करें:

options = {
  :directory => ENV['HOME']
}

जब आप पार्सर को परिभाषित करते हैं, तो यह डिफ़ॉल्ट को अधिलेखित कर देगा यदि कोई उपयोगकर्ता मूल्य प्रदान करता है:

OptionParser.new do |opts|
  opts.on("-d", "--directory HOME", "Directory to use") do |d|
    options[:directory] = d
  end
end

लंबे विवरण

कभी-कभी आपका विवरण लंबा हो सकता है। उदाहरण के लिए irb -h सूचियों पर तर्क जो पढ़ता है:

  --context-mode n  Set n[0-3] to method to create Binding Object,
                    when new workspace was created

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

  opts.on("--context-mode n",
          "Set n[0-3] to method to create Binding Object,",
          "when new workspace was created") do |n|
    optons[:context_mode] = n
  end

आप पूरी तरह से विकल्प की व्याख्या करने के लिए जितनी चाहें उतनी विवरण लाइनें जोड़ सकते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow