In OptionParser posso rendere obbligatoria un'opzione, ma se escludo quel valore prenderà il nome di qualsiasi opzione successiva come valore, rovinando il resto dell'analisi della riga di comando. Ecco un banco di prova che riecheggia i valori delle opzioni:Come gestisco un argomento obbligatorio mancante in Ruby OptionParser?
$ ./test_case.rb --input foo --output bar
output bar
input foo
Ora lasciare fuori il valore per la prima opzione:
$ ./test_case.rb --input --output bar
input --output
C'è qualche modo per impedire che prendere un altro nome opzione come un valore? Grazie!
Ecco il codice di test case:
#!/usr/bin/env ruby
require 'optparse'
files = Hash.new
option_parser = OptionParser.new do |opts|
opts.on('-i', '--input FILENAME', 'Input filename - required') do |filename|
files[:input] = filename
end
opts.on('-o', '--output FILENAME', 'Output filename - required') do |filename|
files[:output] = filename
end
end
begin
option_parser.parse!(ARGV)
rescue OptionParser::ParseError
$stderr.print "Error: " + $! + "\n"
exit
end
files.keys.each do |key|
print "#{key} #{files[key]}\n"
end
Già ... che risolve il caso di test, ma sono davvero sperando che possa fare questo all'interno del blocco OptionParser.new in cui essa appartiene. Si suppone che sia possibile includere un/pattern/in una chiamata on() che qualsiasi argomento deve corrispondere - ma non sto ancora funzionando. Grazie! –