Я должен проанализировать командную строку как
script.rb [options]
с optparse.
Уверенный я могу записать некоторый пользовательский код для обработки имени файла, затем передать ARGV
к optparse, но возможно существует более простой способ сделать это?
Править: существует другой hacky способ проанализировать такую командную строку, и это - передача ['--mandatory-filename'] + ARGV
к optparse затем обработайте --mandatory-filename
опция.
Первый синтаксический анализ !
с помощью optparse, затем просканируйте ARGV и поднимите, если ARGV пусто. Примерно так:
op.parse!
filename = ARGV.pop
raise "Need to specify a file to process" unless filename
Обязательное имя файла не будет обрабатываться OptionParser
и будет оставлено для вас в ARGV - если его нет, просто поднять вручную.
Optparse выполняет аргументы только с параметрами, AFAIK. «Правильный» способ обработки вашего имени файла - работать с ним вне optparse. Я опубликовал пример кода для этого в ответ на этот вопрос.
Кстати, это довольно необычная командная строка. Если это только для вас, хорошо, но другие, вероятно, сочтут это довольно нелогичным. Было бы более нормально иметь: script.rb [options]
...
Просто чтобы продолжить то, что сказали Джулик и Shadowfirebird: При синтаксическом анализе с помощью OptionParser
имейте в виду, что parse!
и синтаксический анализ
имеют разную функциональность. Первый удалит все аргументы, которые он понимает, из переданного массива, где последний оставит их. Это изменяет ваши условия определения наличия требуемого аргумента.