Metoda "Zahtijeva" u Rubyju

click fraud protection

Da biste stvorili komponente za višekratnu upotrebu, one koje se lako mogu koristiti u drugim programima, programski jezik mora na neki način glatko uvesti taj kod u vrijeme izvođenja. U Rubin, the zahtijevati metoda se koristi za učitavanje druge datoteke i izvršavanje svih njezinih izjava. Ovo služi za uvoz svih klasa i način definicije u datoteci. Osim što jednostavno izvrši sve izjave u datoteci, metoda zahtijeva također prati koje su datoteke prethodno potrebne i, stoga, neće trebati dva puta.

Korištenjem metode 'traži'

Metoda zahtijeva uzima naziv datoteke koju zahtijeva kao a niz, kao jedinstveni argument. To može biti ili put do datoteke, kao što je ./lib/some_library.rb ili skraćeno ime, kao što je some_library. Ako je argument put i potpuno ime datoteke, traži se metoda traže tamo datoteku. No, ako je argument skraćeno ime, metoda zahtijeva potražit će kroz nekoliko unaprijed definiranih direktorija u vašem sustavu za tu datoteku. Upotreba skraćenog imena najčešći je način korištenja metode zahtijeva.

instagram viewer

Sljedeći primjer pokazuje kako koristiti zahtjev. Datoteka test_library.rb nalazi se u prvom bloku kodova. Ova datoteka ispisuje poruku i definira novu klasu. Drugi blok kodova je datoteka test_program.rb. Ova datoteka učitava test_library.rb datoteka pomoću thequiremethod i stvara novu TestClass objekt.

stavlja "test_liblioteka uključena"
klasa TestClass
def inicijalizirati
stavlja "TestClass objekt kreiran"
kraj
kraj
#! / usr / bin / env rubin
zahtijevaju 'test_library.rb'
t = TestClass.new

Izbjegavajte sukobe imena

Pri pisanju komponenata za višekratnu upotrebu najbolje je ne deklarirati mnoge varijable u globalnom području izvan bilo kakvih klasa ili metoda ili upotrebom $ prefiks. Ovo je za sprečavanje nečega što se naziva "zagađenje prostora imena. "Ako deklarirate previše imena, drugi program ili knjižnica mogu proglasiti isto ime i uzrokovati sukob imena. Kad dvije potpuno nepovezane knjižnice počnu slučajno mijenjati jedni druge varijable, stvari će se pokvariti - naizgled nasumično. To je vrlo teško bug za pronalaženje i najbolje je samo izbjeći ga.

Da biste izbjegli sukobe imena, možete zatvoriti sve u svojoj knjižnici unutar modul izjava. Ovo će zahtijevati da se ljudi obrate vašim predavanjima i metodama pod potpuno kvalificiranim imenom kao što je MyLibrary:: moj_method, ali vrijedi jer se sukobi s imenima uglavnom neće pojaviti. Osobe koje žele imati sve nazive svojih klasa i metoda na globalnoj razini, to mogu učiniti pomoću uključiti izjava.

Sljedeći primjer ponavlja prethodni primjer, ali uključuje sve u MyLibrary modul. Dvije verzije my_program.rb daju se; onaj koji koristi uključiti izjava i jedna koja ne.

stavlja "test_liblioteka uključena"
modul MyLibrary
klasa TestClass
def inicijalizirati
stavlja "TestClass objekt kreiran"
kraj
kraj
kraj
#! / usr / bin / env rubin
zahtijevaju 'test_library2.rb'
t = Moja biblioteka:: TestClass.new
#! / usr / bin / env rubin
zahtijevaju 'test_library2.rb'
uključuju MyLibrary
t = TestClass.new

Izbjegavajte apsolutne staze

Budući da se komponente za višekratnu uporabu često premještaju, također je najbolje da ne koristite apsolutne staze u vašim potrebama. Apsolutni put je put poput /home/user/code/library.rb. Primijetit ćete da datoteka mora biti na tom mjestu kako bi mogla raditi. Ako se skripta ikada premjesti ili se vaš kućni direktorij ikad promijeni, ta će naredba prestati raditi.

Umjesto apsolutnih staza, često je stvoreno ./lib u mapu vašeg Ruby programa. ./lib direktoriju je dodan u $ LOAD_PATH varijabla koja pohranjuje mape u kojima metoda zahtijeva traži Ruby datoteke. Nakon toga, ako datoteka my_library.rb je pohranjena u direktoriju lib, može se jednostavno učitati u vaš program zahtijevati 'moja_liblioteka' izjava.

Sljedeći je primjer isti kao i prethodni test_program.rb primjeri. Međutim, pretpostavlja se test_library.rb datoteka je pohranjena u datoteci ./lib direktorij i učitava ga gore opisanom metodom.

#! / usr / bin / env rubin
$ LOAD_PATH << './lib'
zahtijevaju 'test_library.rb'
t = TestClass.new
instagram story viewer