0

Вопрос по ruby – Руби OptionParser пустой переключатель «-» поведение

Редакция:

Я написал код, который использует OptionParser для изящной обработки ввода из командной строки. Я сталкиваюсь с двумя основными хитами.

  1. Passing an empty switches '-' doesn't give an error. Of course some programs take that as valid, but mine shouldn't.
  2. The program requires two mandatory switches, but it accepts one switch without complaining! e.g. program.ruby -f foo -b bar is the valid input and both switches are :REQUIRED. But providing only one switch passes without problem and this is not the desired behavior.

Для первого случая я сделал это:

opts.on('-', /\A-\Z/) do
  $stderr.print "Invalid empty switch"
  exit 1
end

Работает нормально. Но это правильный способ сделать это?

Во втором случае я искал решение в блоке OptionParser.new, но я не смог его найти. например

unless options.foo && options.bar
  puts "Error."
  exit 2
end

Делать это вне блока OptionParser.new - это нормально?

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Я не уверен, как это произошло, поскольку я действительно выполнял правки, когда я изучал проблему и продолжал дорабатывать решение. Как заставить модератора перенаправить / удалить это?

    от ismail
  • Так как у другого нет ответов, вы можете просто удалить его. В качестве альтернативы нажмите кнопку "флаг" ссылку ниже вопроса (и выше этих комментариев) и действуйте соответственно.

    от Andrew Marshall
  • Хорошо, я сделаю исправление здесь, поскольку я пытаюсь решить это между тем. Для правильной работы пустого переключателя я использовалopts.on('-', /\A-\Z/) что делает вход в блок только после того, как регулярное выражение выполнено.

    от ismail
  • 0

    Я думаю, что Thor (https

    //github.com/wycats/thor) может решить вашу проблему более эффективно.

  • 1

    Если вы используете OptionParser

    то да, вам нужно явно запретить пустой переключатель и вручную проверить необходимые параметры.

    Однако, если вы использовали другой инструмент для разбора опций, такой каквыбор драгоценного камня по умолчаниюВы можете пометить параметры как необходимые, и неправильные параметры (такие как пустой переключатель) приведут к выводу справки и к выходу приложения. Я понимаю, что в некоторых случаях имеет смысл использовать OptionParser, но лично я предпочитаю использоватьболее удобные инструменты там.

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