2012-02-02 6 views

risposta

8

Per gestire parametri posizionali utilizzando OptionParser, prima analizzare gli interruttori utilizzando OptionParser e quindi recuperare gli argomenti posizionali rimanenti da ARGV:

# optparse-positional-arguments.rb 
require 'optparse' 

options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: #{__FILE__} [command] [options]" 

    opts.on("-v", "--verbose", "Run verbosely") do |v| 
    options[:verbose] = true 
    end 

    opts.on("--list x,y,z", Array, "Just a list of arguments") do |list| 
    options[:list] = list 
    end 
end.parse! 

Sulla eseguendo lo script:

$ ruby optparse-positional-arguments.rb foobar --verbose --list 1,2,3,4,5 

p options 
# => {:verbose=>true, :list=>["1", "2", "3", "4", "5"]} 

p ARGV 
# => ["foobar"] 

Il dothis o dothat i comandi possono essere ovunque Il options hash e ARGV rimane lo stesso indipendentemente:

# After options 
$ ruby optparse-positional-arguments.rb --verbose --list 1,2,3,4,5 foobar 

# In between options 
$ ruby optparse-positional-arguments.rb --verbose foobar --list 1,2,3,4,5 
+0

In questo modo non posso essere sicuro se '' dothis' o dothat' è stato il primo parametro, giusto? –

+0

Sì, hai ragione. Puoi pensarci come 'script [comando] [opzioni]'. In cui il comando e le opzioni sono posizionalmente intercambiabili. Quindi potrebbe anche essere 'script [opzioni] [comando]'. Funziona per te? – csherin

+0

e quale sarebbe un buon modo per ottenere possibili comandi nella stringa di utilizzo? incollalo nel 'opts.banner'? – Paladin