Вот ссылка на мой последний средний пост:
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, если он был вам полезен.
Вот ссылка на мой последний средний пост: