Използвайте OptionParser, за да анализирате команди в Ruby

click fraud protection

В статия, обсъждаща характеристиките на OptionParser обсъдихме някои от причините, които правят използването на OptionParser в рубин за предпочитане от гледане през ARGV ръчно за разбор команди на ръка. Сега е време да се научите как да използвате OptionParser и неговите функции.

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

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

# на метода за анализ Методът 'parse' просто анализира
# ARGV, докато „анализа!“ метод анализира ARGV и премахва
# всички опции, намерени там, както и всички параметри за
# опциите. Остава само списъкът с файлове за преоразмеряване.
optparse.parse!
pp "Опции:", опции
pp "ARGV:", ARGV

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

Прост превключвател е аргумент без опционални форми или без параметри. Ефектът ще бъде просто да зададете флаг в опциите хашиш. Други параметри няма да бъдат предадени на На метод.

options [: simple] = false
opts.on ('-s', '--simple', "Simple argument") правят
options [: simple] = true
край

Превключване със Задължителен параметър

Превключвателите, които приемат параметър, трябва само да посочат името на параметъра в дългата форма на превключвателя. Например, "-f", "--file FILE" означава, че превключвателят -f или --file приема един параметър, наречен FILE, и този параметър е задължителен. Не можете да използвате или -f или --file, без да го предавате и параметър.

опции [: mand] = ""
opts.on ('-m', '- задължителен FILE', "Задължителен аргумент") do | f |
опции [: mand] = f
край

Превключете с незадължителен параметър

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

В примера идиомата a = b || ° С се използва. Това е просто стенограма за „a = b, но ако b е невярно или nil, a = c“.

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "незадължителен аргумент") | | | |
опции [: opt] = f || "Нищо"
край

Автоматично преобразуване в плаващ

OptionParser може автоматично да конвертира аргумент в някои типове. Един от тези видове е Float. За да конвертирате автоматично вашите аргументи в превключвател към Float, предайте Float на На метод след вашите низове за описание на превключвателя.

Автоматичните преобразувания са удобни. Те не само ви спестяват стъпката за преобразуване на низа в желания тип, но и проверяват формата за вас и ще хвърлят изключение, ако е форматиран неправилно.

опции [: float] = 0.0
opts.on ('-f', '--float NUM', Float, "Преобразуване в плаващ") do | f |
опции [: float] = f
край

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

Списъци на аргументи

Аргументите могат да се тълкуват като списъци. Това може да се разглежда като преобразуване в масив, както сте преобразували в Float. Докато вашият низ за опции може да дефинира параметъра, който да се нарича "a, b, c", OptionParser ще позволи сляпо произволен брой елементи в списъка. Така че, ако имате нужда от конкретен брой елементи, не забравяйте сами да проверите дължината на масива.

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

Комплект аргументи

Понякога има смисъл да ограничите аргументите до преминаване до няколко възможности за избор. Например, следният превключвател ще вземе само един задължителен параметър, а параметърът трябва да бъде един от да, не или може би. Ако параметърът е нещо друго, ще бъде изхвърлено изключение.

За целта изпратете списък с приемливи параметри като символи след низовете за описание на превключвателя.

опции [: set] =: да
opts.on ('-s', '--set OPT', [: да,: не,: може би], "Параметри от набор") do | s |
опции [: set] = s
край

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

Превключвателите могат да имат отрицателна форма. Превключвателят --negated може да има такъв, който прави обратния ефект, наречен --no-неутрализиран. За да опишете това в низ за описание на превключвателя, поставете алтернативната част в скоби: - [няма подобен] отричани. Ако се срещне първата форма, true ще бъде предаден на блока, а false ще бъде блокиран, ако се срещне втората форма.

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