Ruby OptionParser: 2 параметра, 1 аргумент

Я пытаюсь использовать OptionParser для чтения нескольких параметров, и все они действуют на одно имя файла. Ex: myprogram.rb -a -b file.txt Как я могу сделать так, чтобы 2 параметра имели общий обязательный аргумент, а также разрешить выполнение таких вещей, как -h, без параметров? В настоящее время приведенная выше строка просто заставляет -a принимать -b в качестве параметра.

optionparser.on("-a FILENAME", "Do this") do |a|
  puts a
end
optionparser.on("-b FILENAME", "Do that") do |b|
  puts b
end

ИЗМЕНИТЬ:

Что он делает:

myprogram.rb -a -b file.txt
=> -b

Что мне нужно сделать:

myprogram.rb -a -b file.txt
=> file.txt
=> file.txt

Примечание.

Эти команды должны работать как независимо, так и одновременно, подобно ls -a .., ls -l .. и ls -a -l ... Однако НИ ОДНА команда не должна работать, если имя файла не задано. В идеале это решение должно работать с любым количеством опций, n.


person AnthonyW    schedule 04.04.2013    source источник
comment
Ссылка на документы ruby-doc.org/stdlib-1.9. 3/libdoc/optparse/rdoc/   -  person AnthonyW    schedule 04.04.2013


Ответы (1)


Что у меня есть прямо сейчас:

alpha=false
beta=false
optionparser.on("-a", "Do this") do |a|
  alpha = a
end
optionparser.on("-b", "Do that") do |b|
  beta = b
end
if alpha
  #do something with ARGV[0]
end
if beta
  #do something with ARGV[0]
end

В этом коде предполагается, что после выбора опций в командной строке останется только имя файла. Я чувствую, что есть более элегантный способ сделать это, который учитывает другие вещи, потенциально загромождающие командную строку, и позволяет исправлять для них ошибки.

person AnthonyW    schedule 04.04.2013