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

0

Редакция:

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

Passing an empty switches '-' doesn't give an error. Of course some programs take that as valid, but mine shouldn't. 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 - это нормально?

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

Ваш Ответ

2   ответа
1

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

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

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

0

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы