OptionParser-komentorivivalinnat lisäävät Ruby Way -vaihtoehtoa

Ruby on varustettu tehokkaalla ja joustavalla työkalulla komentoriviasetusten jäsentämiseen, OptionParseriin. Kun olet oppinut käyttämään tätä, et koskaan palaa ARGV: n läpi manuaalisesti. OptionParserissa on useita ominaisuuksia, jotka tekevät siitä varsin houkuttelevan Ruby-ohjelmoijille. Jos olet koskaan jäsentänyt vaihtoehtoja käsin Ruby- tai C-muodossa tai getoptlong C-toiminto, näet kuinka tervetulleita jotkut näistä muutoksista ovat.

  • OptionParser on KUIVA. Sinun on vain kirjoitettava komentorivikytkin, sen argumentit, käytettävä koodi, kun se kohdataan, ja komentorivikytkimen kuvaus kerran komentosarjassa. OptionParser luo automaattisesti ohjeet sinulle tästä kuvauksesta ja päättelee kaiken argumentin kuvauksesta. Se esimerkiksi tietää --tiedosto [TIEDOSTO] vaihtoehto on valinnainen ja ottaa yhden argumentin. Lisäksi se tietää sen - [- no] -Verbose on todella kaksi vaihtoehtoa ja hyväksyy molemmat muodot.
  • OptionParser muuntaa asetukset automaattisesti tiettyyn luokkaan. Jos vaihtoehto ottaa kokonaisluvun, se voi muuntaa minkä tahansa komentorivillä siirretyn merkkijonon kokonaisluvuksi. Tämä vähentää osaa ikävystä, joka liittyy komentoriviasetusten jäsentämiseen.
    instagram viewer
  • Kaikki on hyvin hillittyä. Kaikki vaihtoehdot ovat samassa paikassa, ja vaihtoehdon vaikutus on oikealla option määritelmän vieressä. Jos vaihtoehtoja on lisättävä, muutettava tai joku haluaa vain nähdä, mitä he tekevät, on vain yksi paikka etsiä. Kun komentorivi on jäsentätty, yksittäinen Hash tai OpenStruct pitää tulokset.

Tarpeeksi jo, näytä minulle koodi

Joten tässä on yksinkertainen esimerkki käytöstä OptionParser. Se ei käytä mitään edistyneitä ominaisuuksia, vain perusasiat. Vaihtoehtoja on kolme, ja yksi niistä ottaa parametrin. Kaikki vaihtoehdot ovat pakollisia. On olemassa -v / - verbose ja -q / - nopea vaihtoehtoja, samoin kuin -l / - lokitiedosto TIEDOSTO vaihtoehto. Lisäksi skripti ottaa luettelon tiedostoista, jotka ovat riippumattomia vaihtoehdoista.

 #! / usr / bin / env ruby

 # Skripti, joka teeskentelee koon muuttavan useita kuvia

 vaatia "optparse"


 # Tämä tiiviste sisältää kaikki vaihtoehdot

 # jäsentänyt komentoriviltä

 # OptionParser.

 vaihtoehdot = {}


 optparse = OptionParser.new do | opts |

 # Aseta yläreunassa oleva banderoli

 # ohjenäytöstä.

 opts.banner = "Käyttö: optparse1.rb [asetukset] tiedosto1 tiedosto2 ..."


 # Määritä vaihtoehdot ja mitä ne tekevät

 asetukset [: verbose] = vääriä

 opts.on ('-v', '--verbose', 'Tulosta lisätietoja') tekevät

 asetukset [: verbose] = totta

 pää


 asetukset [: nopea] = väärä

 opts.on ('-q', '--quick', 'Suorita tehtävä nopeasti') tee

 asetukset [: nopea] = totta

 pää


 asetukset [: lokitiedosto] = nolla

 opts.on ('-l', '--logfile FILE', 'Kirjoita loki tiedostoon') do | tiedosto |

 asetukset [: lokitiedosto] = tiedosto

 pää


 # Tämä näyttää ohjenäytön, kaikki ohjelmat ovat

 # oletettiin olevan tämä vaihtoehto.

 opts.on ('-h', '- apu', 'Näytä tämä näyttö') tekevät

 antaa valinnat

 poistuminen

 pää

 pää


 # Jäsennä komentorivi. Muista, että on olemassa kaksi muotoa

 # jäsentämismenetelmästä. 'Parsointimenetelmä' yksinkertaisesti jäsentää

 # ARGV, kun taas 'jäsentää!' menetelmä jäsentää ARGV: n ja poistaa

 # kaikki siellä olevat vaihtoehdot sekä parametrit

 # vaihtoehdot. Jäljellä on luettelo tiedostoista, joiden kokoa tulee muuttaa.

 optparse.parse!


 asettaa "olla verbose", jos vaihtoehdot [: verbose]

 asettaa "olla nopea", jos vaihtoehdot [: nopea]

 asettaa "Kirjautuminen tiedostoon # {asetukset [: lokitiedosto]}", jos asetukset [: lokitiedosto]


 ARGV.kaikkia | f |

 asettaa "Kuvan koon muuttaminen # {f} ..."

 nukkua 0,5

 pää

Tutkitaan säännöstöä

Aloitaksesi optparse kirjasto vaaditaan. Muista, että tämä ei ole helmi. Sen mukana tulee Ruby, joten helmaa ei tarvitse asentaa tai vaatia rubygems ennen optparse.

Tässä käsikirjoituksessa on kaksi mielenkiintoista objektia. Ensimmäinen on vaihtoehtoja, julistettu korkeimmalle laajuudelle. Se on yksinkertainen tyhjä hash. Kun asetukset on määritetty, he kirjoittavat oletusarvot tähän hashiin. Esimerkiksi tämän komentosarjan oletuskäyttäytyminen on ei ole sanallinen, niin vaihtoehdot [: monisanainen] on asetettu väärään. Kun komentorivillä on vaihtoehtoja, ne muuttavat arvoja vaihtoehtoja heijastavat niiden vaikutusta. Esimerkiksi kun -v / - verbose on kohdattu, se antaa totta vaihtoehdot [: monisanainen].

Toinen mielenkiintoinen kohde on optparse. Tämä on OptionParser itse esine. Kun rakennat tämän objektin, siirrät sen lohkon. Tämä lohko ajetaan rakentamisen aikana ja rakentaa luettelon vaihtoehdoista sisäisissä tietorakenteissa ja valmistautuu jäsentämään kaiken. Kaikki taikuus tapahtuu tässä lohkossa. Määrität kaikki vaihtoehdot tässä.

Asetusten määrittäminen

Jokainen vaihtoehto noudattaa samaa mallia. Kirjoita ensin oletusarvo hash-tiedostoon. Tämä tapahtuu heti OptionParser on rakennettu. Seuraavaksi soitat päällämenetelmä, joka määrittelee itse vaihtoehdon. Menetelmää on useita muotoja, mutta tässä käytetään vain yhtä. Muiden muotojen avulla voit määrittää automaattiset tyyppimuunnokset ja arvojoukot, joihin vaihtoehto on rajoitettu. Tässä käytetyt kolme argumenttia ovat lyhyt muoto, pitkä muoto ja vaihtoehdon kuvaus.

päällä menetelmä päättelee useita asioita pitkästä muodosta. Yksi asia on päätellä on minkä tahansa parametrin läsnäolo. Jos vaihtoehdossa on parametreja, se välittää ne parametrina lohkoon.

Jos vaihtoehtoa kohdataan komentorivillä, lohko siirtyi päällä menetelmä suoritetaan. Täällä lohkot eivät tee paljon, ne vain asettavat arvot vaihtoehtojen hash-arvoon. Voitaisiin tehdä enemmän, kuten tarkistaa, että viitattu tiedosto on olemassa jne. Jos virheitä esiintyy, näistä lohkoista voidaan heittää poikkeuksia.

Lopuksi komentorivi jäsennetään. Tämä tapahtuu soittamalla jäsentää! menetelmä OptionParser esine. Tätä menetelmää on oikeastaan ​​kaksi muotoa, jäsentää ja jäsentää!. Kuten huutomerkillä varustettu versio viittaa, se on tuhoisa. Sen lisäksi, että se jäsentää komentorivin, se myös poistaa kaikki löydetyt vaihtoehdot argv. Tämä on tärkeä asia, se jättää vain luettelon toimitetuista tiedostoista kohdassa argv.

instagram story viewer