Вот ссылка на мой последний средний пост:
Program Arguments in Ruby: Part I
В этой статье мы рассмотрим следующие темы:
OptionParser
классOptionParser#on
методOptionParser#on
и приведение типов
Прежде чем начать
Позвольте мне представить здесь платформу, которая помогла мне изучить большую часть моих знаний о Ruby. Действительно, Pluralsight - потрясающая платформа.
С 50+ курсами, которые охватывают различные темы по Ruby и Ruby on Rails, это лучший способ поднять свои знания на новый уровень!
Попробуйте бесплатно 👇😉
Спасибо за уделенное время!
Класс OptionParser
OptionParser
- это класс, упрощающий синтаксический анализ и интерпретацию параметров командной строки.
Этот класс предоставляет набор методов для обработки баннеров, справочных сообщений о параметрах, приведения типов и т. Д.
OptionParser # в методе
Метод OptionParser#on
добавляет к анализатору переключатель, связанный с обработчиком.
Переключатель - это экземпляр класса, производного от OptionParser::Switch
.
Наиболее важные производные классы:
- OptionParser::Switch::NoArgument
- OptionParser::Switch::RequiredArgument
- OptionParser::Switch::OptionalArgument
Эти классы отвечают за обработку аргументов в соответствии со своей специализацией.
Он также сохраняет блок, переданный как аргумент метода OptionParser#on
. Этот блок хранится как proc
внутри соответствующего переключателя.
Придется усвоить большой словарный запас, и это может быть трудно разгадать.
Итак, давайте разберем эту концепцию на серии примеров для каждого переключателя.
OptionParser :: Switch :: NoArgument
Основное использование метода OptionParser#on
- обработка параметра, не имеющего аргументов.
# in parser.rb require 'optparse' require 'optparse/time' OptionParser.new do |parser| parser.on('-t', '--time') do |time| p time end end.parse!
В приведенном выше примере программа сможет связать короткий параметр -t
и длинный параметр --time
с блоком, переданным в качестве аргумента метода parser.on()
.
В этом случае вариант не требует аргументов.
Итак, сгенерированный переключатель будет экземпляром OptionParser::Switch::NoArgument
.
Это означает, что любой аргумент, переданный в параметр -t
, будет проигнорирован.
?> ruby parser.rb --time=11:12:13 true
Здесь аргумент 11:12:13
опции--time
игнорируется и вместо него возвращается true
.
Теперь давайте посмотрим, как требовать аргумент для данной опции.
OptionParser :: Switch :: RequiredArgument
Давайте посмотрим, как синтаксис требует аргумента
# in parser.rb require 'optparse' require 'optparse/time' OptionParser.new do |parser| parser.on('-t', '--time=TIME') do |time| p time end end.parse!
В этом случае для опции -t
требуется аргумент, обозначенный словом TIME
.
Таким образом, сгенерированный переключатель для параметра -t
будет экземпляром OptionParser::Switch::RequiredArgument
.
?> ruby parser.rb --time=11:12:13 "11:12:13" ?> ruby parser.rb --time parser.rb:8:in `<main>’: missing argument: --time (OptionParser::MissingArgument)
Здесь аргумент 11:12:13
параметра --time
передается как аргумент блока, который передается методу parser.on()
.
Обратите внимание, что аргумент time
- это String
.
Кроме того, возникает ошибка OptionParser::MissingArgument
, если аргумент не указан для параметра --time
.
Теперь давайте посмотрим, как добавить необязательный аргумент к опции.
OptionParser :: Switch :: OptionalArgument
Вот синтаксис для добавления необязательного аргумента
# in parser.rb require 'optparse' require 'optparse/time' OptionParser.new do |parser| parser.on('-t', '--time[=TIME]') do |time| p time end end.parse!
Необязательный аргумент обозначается словом =TIME
в квадратных скобках ([=TIME]
).
В этом случае сгенерированный переключатель для параметра -t
будет экземпляром OptionParser::Switch::OptionalArgument
?> ruby parser.rb --time=11:12:13 "11:12:13" ?> ruby parser.rb --time nil
Здесь аргумент 11:12:13
опции--time
передается как аргумент блока parser.on()
.
Кроме того, аргумент time
равен nil
, если для параметра--time
не задан аргумент.
В нашем примере time
- это String
. Было бы здорово получить этот аргумент блока как объект Time
.
OptionParser # on и приведение типов
Для этого мы можем добавить третий аргумент к методу OptionParser#on
. Этот аргумент исключает класс Ruby, чтобы преобразовать аргумент параметра в экземпляр данного типа класса.
require 'optparse' require 'optparse/time' OptionParser.new do |parser| parser.on('-t', '--time=TIME', Time) do |time| p time.class end end.parse!
Запустим программу
?> ruby parser.rb --time=11:12:13 Time
Здесь мы видим, что аргумент time
теперь является экземпляром Time
, как указано в качестве третьего аргумента вызова метода parser.on()
.
Вуаля!
Спасибо, что нашли время прочитать этот пост :-)
Не стесняйтесь 👏 и поделитесь этим постом на Medium, если он был вам полезен.
Вот ссылка на мой последний средний пост: