Опции за команден ред OptionParser Опции Ruby Way

click fraud protection

Ruby се предлага оборудван с мощен и гъвкав инструмент за разбор на опциите на командния ред, OptionParser. След като научите как да използвате това, никога няма да се върнете към ръчния преглед на ARGV. OptionParser има редица функции, които го правят доста привлекателен за Ruby програмистите. Ако някога сте анализирали опции на ръка в Ruby или C или с getoptlong C функция, ще видите колко добре дошли са някои от тези промени.

  • OptionParser е DRY. Трябва само да напишете превключвателя на командния ред, неговите аргументи, кода, който да се изпълнява, когато се срещне, и описанието на превключвателя на командния ред веднъж във вашия скрипт. OptionParser автоматично ще генерира помощни екрани за вас от това описание, както и ще заключи всичко за аргумента от неговото описание. Например, тя ще знае --файл [ФАЙЛ] опцията е незадължителна и взема един аргумент. Също така ще знае това - [- не] -verbose наистина е два варианта и ще приеме и двете форми.
  • OptionParser автоматично ще преобразува опциите в определен клас.
    instagram viewer
    Ако опцията вземе цяло число, тя може да преобразува всеки низ, предаден от командния ред, в цяло число. Това намалява част от поредицата, участваща в анализа на опциите на командния ред.
  • Всичко е много задържано. Всички опции са на едно и също място и ефектът от опцията е точно до определението за опцията. Ако трябва да се добавят, променят опции или някой просто иска да види какво прави, има само едно място за търсене. След като командният ред е анализиран, един Hash или OpenStruct ще задържи резултатите.

Стига вече, Покажете ми някакъв код

Така че ето един прост пример как да използвате OptionParser. Той не използва нито една от разширените функции, а само основите. Има три опции и една от тях взема параметър. Всички опции са задължителни. Там са -v / - многословен и -q / - бързо опции, както и -l / - logfile FILE опция. Освен това скриптът взема списък с файлове, независими от опциите.

 #! / usr / bin / env рубин

 # Скрипт, който ще се преструва да оразмерява редица изображения

 изискват „optparse“


 # Този хеш съдържа всички опции

 # анализиран от командния ред от

 # OptionParser.

 options = {}


 optparse = OptionParser.new do | opts |

 # Задайте банер, показан в горната част

 # на екрана за помощ.

 opts.banner = "Използване: optparse1.rb [опции] file1 file2 ..."


 # Определете опциите и какво правят

 options [: verbose] = false

 opts.on ('-v', '--verbose', 'Извежда повече информация')

 options [: verbose] = true

 край


 options [: quick] = false

 opts.on ('-q', '--quick', 'Изпълнете задачата бързо') направете

 опции [: бързо] = вярно

 край


 опции [: logfile] = нула

 opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |

 опции [: logfile] = файл

 край


 # Това показва екран за помощ, всички програми са

 # се предполага, че има тази опция.

 opts.on ('-h', '--help', 'Покажи този екран')

 поставя опт

 изход

 край

 край


 # Разбор на командния ред. Не забравяйте, че има две форми

 # на метода за анализ Методът 'parse' просто анализира

 # ARGV, докато „анализа!“ метод анализира ARGV и премахва

 # всички опции, намерени там, както и всички параметри за

 # опциите. Остава само списъкът с файлове за преоразмеряване.

 optparse.parse!


 поставя "Да бъдеш многословен", ако опции [: verbose]

 поставя "Бързо", ако опции [: бързо]

 поставя "Logging to file # {options [: logfile]}" if options [: logfile]


 ARGV.each do | f |

 поставя "Преоразмеряване на изображение # {f} ..."

 сън 0,5

 край

Разглеждане на Кодекса

За начало с optparse задължителна е библиотека. Не забравяйте, че това не е скъпоценен камък. Той идва с Ruby, така че няма нужда да инсталирате скъпоценен камък или да изисквате RubyGems преди optparse.

В този скрипт има два интересни обекта. Първият е настроики, обявена в най-големия обхват. Това е просто празно хашиш. Когато опциите са дефинирани, те записват своите стойности по подразбиране в този хеш. Например поведението по подразбиране е за този скрипт не бъди многословен, така опции [: многословен] е зададено на false. Когато се срещнат опции в командния ред, те ще променят стойностите в настроики да отразяват ефекта им. Например, когато -v / - многословен се среща, тя ще присвои вярно на опции [: многословен].

Вторият интересен обект е optparse. Това е OptionParser самия обект. Когато конструирате този обект, го предавате на блок. Този блок се изпълнява по време на строителството и ще състави списък с опции във вътрешните структури от данни и ще се подготвите да анализирате всичко. Именно в този блок се случва цялата магия. Тук дефинирате всички опции.

Определяне на опции

Всяка опция следва същия модел. Първо записвате стойността по подразбиране в хеша. Това ще се случи веднага щом OptionParser е конструиран. След това се обаждате на Наметод, което определя самата опция. Има няколко форми на този метод, но тук се използва само една. Останалите форми ви позволяват да дефинирате автоматични преобразувания на типа и набори от стойности, до които е ограничена опцията. Трите аргумента, използвани тук, са кратката форма, дългата форма и описанието на опцията.

Най- На метод ще изведе редица неща от дългата форма. Едно е, че може да се направи извода, е наличието на някакви параметри. Ако има опции в опцията, тя ще ги предаде като параметри на блока.

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

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

instagram story viewer