Используйте OptionParser для разбора команд в Ruby

в статья о возможностях OptionParser мы обсудили некоторые из причин, которые делают использование OptionParser в Рубин предпочтительнее просматривать ARGV вручную для разбора команды рукой. Теперь пришло время приступить к изучению того, как использовать OptionParser и его функции.

Следующий шаблонный код будет использоваться для всех примеров в этом руководстве. Чтобы попробовать любой из примеров, просто поместите пример opts.on блок рядом с комментарием TODO. Запущенная программа выведет на экран состояние опций ARGV и, что позволит вам изучить эффекты ваших переключателей.

#! / usr / bin / env ruby
требует "optparse"
требует 'pp'
# Этот хеш будет содержать все параметры
# анализируется из командной строки
# OptionParser.
варианты = {}
optparse = OptionParser.new do | opts |
# TODO: поместите параметры командной строки здесь
# Появится экран справки, все программы
# предполагается, что есть эта опция.
opts.on ('-h', '--help', 'Показать этот экран') сделать
ставит опции
выход
конец
конец
# Разбор командной строки. Помните, что есть две формы
instagram viewer

# метода разбора. Метод parse просто разбирает
# ARGV, пока "разбирайся!" метод разбирает ARGV и удаляет
# любые параметры, найденные там, а также любые параметры для
# варианты. То, что осталось, это список файлов для изменения размера.
optparse.parse!
пп "Опции:", опции
пп "АРГВ:", АРГВ

Простой переключатель

Простой переключатель - это аргумент без дополнительных форм или параметров. Эффект будет состоять в том, чтобы просто установить флаг в настройках гашиш. Никакие другие параметры не будут переданы на метод.

параметры [: просто] = ложь
opts.on ('-s', '--simple', "Простой аргумент") сделать
параметры [: просто] = правда
конец

Переключить с обязательным параметром

Коммутаторы, которые принимают параметр, должны указывать имя параметра только в длинной форме коммутатора. Например, "-f", "--file FILE" означает, что ключ -f или --file принимает один параметр с именем FILE, и этот параметр является обязательным. Вы не можете использовать -f или --file, не передавая ему параметр.

options [: mand] = ""
opts.on ('-m', '--mandatory FILE', "Обязательный аргумент") do | f |
параметры [: мандат] = f
конец

Переключатель с дополнительным параметром

Параметры переключения не должны быть обязательными, они могут быть необязательными. Чтобы объявить параметр переключателя необязательным, поместите его имя в скобках в описании переключателя. Например, "--logfile [FILE]" означает, что параметр FILE является необязательным. Если не указан, программа примет нормальное значение по умолчанию, например, файл с именем log.txt.

В примере, идиома a = b || с используется. Это просто сокращение для «a = b, но если b ложно или ноль, a = c».

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Необязательный аргумент") do | f |
параметры [: opt] = f || "ничего"
конец

Автоматически конвертировать в Float

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

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

options [: float] = 0.0
opts.on ('-f', '--float NUM', Float, "Конвертировать в float") do | f |
параметры [: float] = f
конец

Некоторые другие типы, которые OptionParser может преобразовать в автоматически, включают в себя Time и Integer.

Списки аргументов

Аргументы можно интерпретировать как списки. Это можно рассматривать как преобразование в массив, как вы преобразовали в Float. В то время как ваша строка параметров может определять параметр, который будет называться «a, b, c», OptionParser будет вслепую разрешать любое количество элементов в списке. Итак, если вам нужно определенное количество элементов, обязательно проверьте длину массива самостоятельно.

параметры [: список] = []
opts.on ('-l', '--list a, b, c', Array, "Список параметров") do | l |
параметры [: список] = l
конец

Набор аргументов

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

Для этого передайте список допустимых параметров в виде символов после строк описания переключателя.

параметры [: установить] =: да
opts.on ('-s', '--set OPT', [: yes,: no,: возможно], "Параметры из набора") do | s |
options [: set] = s
конец

Отрицательные формы

Переключатели могут иметь отрицательную форму. Выключатель --negated может иметь тот, который делает противоположный эффект, называется --no-отрицается. Чтобы описать это в строке описания переключателя, поместите альтернативную часть в скобки: - [нет-] Инвертированный. Если встречается первая форма, true будет передано в блок, а false будет заблокировано, если встречается вторая форма.

параметры [: нег] = ложь
opts.on ('-n', '- [no-] отрицаемый', "Отрицательные формы") do | n |
параметры [: neg] = n
конец
instagram story viewer