Zoeken…


Invoering

OptionParser kan worden gebruikt voor het parseren van opdrachtregelopties van ARGV .

Verplichte en optionele opdrachtregelopties

Het is relatief eenvoudig om de opdrachtregel handmatig te parseren als u niet op zoek bent naar iets te complex:

# 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

Maar wanneer uw opties gecompliceerder beginnen te worden, moet u waarschijnlijk een optieparser gebruiken, zoals, OptionParser :

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!

Er is ook een niet-destructieve parse , maar het is een stuk minder handig als je van plan bent om de rest van wat er in ARGV is te ARGV .

De klasse OptionParser heeft geen manier om verplichte argumenten af te dwingen (zoals --site in dit geval). Je kunt echter je eigen controle uitvoeren nadat je parse! :

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

Zie dit antwoord voor een meer generieke verplichte optiehandler. In het geval dat niet duidelijk is, zijn alle opties optioneel, tenzij u alles in het werk stelt om ze verplicht te maken.

Standaard waarden

Met OptionsParser is het heel eenvoudig om standaardwaarden in te stellen. Vul gewoon de hash in waarin u de opties opslaat:

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

Wanneer u de parser definieert, wordt de standaard overschreven als een gebruiker een waarde opgeeft:

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

Lange beschrijvingen

Soms kan uw beschrijving vrij lang worden. Bijvoorbeeld irb -h vermeldt op argument dat luidt:

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

Het is niet meteen duidelijk hoe dit te ondersteunen. De meeste oplossingen moeten worden aangepast om de inspringing van de tweede en volgende lijnen uit te lijnen met de eerste. Gelukkig ondersteunt de methode on meerdere beschrijvingsregels door ze toe te voegen als afzonderlijke argumenten:

  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

U kunt zoveel beschrijvingsregels toevoegen als u wilt om de optie volledig uit te leggen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow