„Reikalauti“ metodas Ruby

Klaviatūra stambiu planu

Johnas Lambas/Photographer's Choice RF/Getty Images





Norint sukurti daugkartinio naudojimo komponentus, tokius, kuriuos galima lengvai naudoti kitose programose, programavimo kalba turi turėti tam tikrą būdą sklandžiai importuoti tą kodą vykdymo metu. ĮRubinas, reikalauti metodas naudojamas kitam failui įkelti ir visam jo vykdymui pareiškimus . Tai skirta importuoti visas klases ir metodas apibrėžimai faile. Be to, kad paprasčiausiai vykdomi visi faile esantys teiginiai, reikalaujamas metodas taip pat stebi, kurie failai buvo reikalingi anksčiau, todėl failo nereikės du kartus.

„Reikalauti“ metodo naudojimas

Reikalingas metodas paima reikalingo failo pavadinimą, kaip a styga , kaip vieną argumentą. Tai gali būti kelias į failą, pvz ./lib/some_library.rb arba sutrumpintas pavadinimas, pvz kai_biblioteka . Jei argumentas yra kelias ir visas failo pavadinimas, failo ten ieškos reikalavimo metodas. Tačiau jei argumentas yra sutrumpintas pavadinimas, reikalavimo metodas to failo ieškos daugelyje iš anksto nustatytų katalogų jūsų sistemoje. Sutrumpinto pavadinimo naudojimas yra labiausiai paplitęs reikalavimo metodo naudojimo būdas.



Toliau pateiktame pavyzdyje parodyta, kaip naudoti reikalavimo teiginį. Failas test_library.rb yra pirmame kodo bloke. Šis failas išspausdina pranešimą ir apibrėžia naują klasę. Antrasis kodo blokas yra failas test_program.rb . Šis failas įkelia test_library.rb failą naudodami reikalauti metodą ir sukuria naują TestClass objektas.

įdeda „test_library įtraukta“
klasė TestClass
def inicijuoti
įdeda 'TestClass objektas sukurtas'
pabaiga
pabaiga
#!/usr/bin/env ruby
reikalauti „test_library.rb“
t = TestClass.new

Venkite vardų susidūrimų

Rašant pakartotinai naudojamus komponentus, geriausia nedeklaruoti daugelio visuotinės apimties kintamųjų už bet kokių klasių ar metodų ribų arba naudojant $ priešdėlis. Taip siekiama užkirsti kelią tam, kas vadinama vardų erdvės tarša .' Jei deklaruosite per daug pavadinimų, kita programa arba biblioteka gali paskelbti tą patį pavadinimą ir sukelti vardo susidūrimą. Kai dvi visiškai nesusijusios bibliotekos netyčia pradeda keisti viena kitos kintamuosius, viskas sugenda – atrodo, atsitiktinai. Tai labai sunku atsekti klaidą ir geriausia jos vengti.



Kad išvengtumėte pavadinimų nesuderinamumo, viską, kas yra bibliotekoje, galite įtraukti į a modulis pareiškimas. Dėl to žmonės turės nurodyti jūsų klases ir metodą visiškai tinkamu pavadinimu, pvz., Mano biblioteka::mano_metodas , bet tai verta, nes vardų susidūrimų paprastai nebūna. Žmonėms, kurie nori turėti visų jūsų klasių ir metodų pavadinimus visuotinėje srityje, jie gali tai padaryti naudodami įtraukti pareiškimas.

Šis pavyzdys pakartoja ankstesnį pavyzdį, bet viską įtraukia į a Mano biblioteka modulis. Dvi versijos mano_programa.rb yra duoti; tas, kuris naudoja įtraukti pareiškimą ir tą, kuris to nedaro.

įdeda „test_library įtraukta“
modulis MyLibrary
klasė TestClass
def inicijuoti
įdeda 'TestClass objektas sukurtas'
pabaiga
pabaiga
pabaiga
#!/usr/bin/env ruby
reikalauti „test_library2.rb“
t = Mano biblioteka::TestClass.new
#!/usr/bin/env ruby
reikalauti „test_library2.rb“
įtraukti MyLibrary
t = TestClass.new

Venkite absoliučių kelių

Kadangi daugkartinio naudojimo komponentai dažnai perkeliami, taip pat geriausia nenaudoti absoliučių kelių reikalinguose skambučiuose. Absoliutus kelias yra panašus į kelią /home/user/code/library.rb . Pastebėsite, kad failas turi būti tiksliai toje vietoje, kad veiktų. Jei scenarijus kada nors bus perkeltas arba jūsų namų katalogas kada nors pasikeis, reikalavimas nustos veikti.

Vietoj absoliučių kelių dažnai įprasta sukurti a ./lib katalogą savo Ruby programos kataloge. The ./lib katalogas pridedamas prie $LOAD_PATH kintamasis, kuriame saugomi katalogai, kuriuose reikalauja metodas ieško Ruby failų. Po to, jei failas mano_biblioteka.rb yra saugomas lib kataloge, jį galima įkelti į savo programą naudojant paprastą reikalauti „mano_biblioteka“ pareiškimas.



Toliau pateiktas pavyzdys yra toks pat kaip ir ankstesnis test_program.rb pavyzdžių. Tačiau daroma prielaida, test_library.rb failas yra saugomas ./lib katalogą ir įkelia jį aukščiau aprašytu būdu.

#!/usr/bin/env ruby
$LOAD_PATH<< './lib'
reikalauti „test_library.rb“
t = TestClass.new