Metoda "Zahtevaj" v Rubyju

Da bi ustvarili komponente za večkratno uporabo, tiste, ki jih je mogoče enostavno uporabiti v drugih programih, mora programski jezik na nek način nemoteno uvoziti to kodo. V Ruby, the zahtevajo se uporablja za nalaganje druge datoteke in izvajanje vseh njenih datotek izjave. To služi za uvoz vseh razredov in metoda definicije v datoteki. Poleg tega, da preprosto izvrši vse stavke v datoteki, metoda zahteva tudi sledi, katere datoteke so bile predhodno zahtevane, zato datoteke ne bo zahteval dvakrat.

Uporaba metode 'Zahtevaj'

Metoda zahteva ime datoteke zahteva kot vrvica, kot en sam argument. To je lahko pot do datoteke, kot je ./lib/some_library.rb ali skrajšano ime, kot je nekaj_liblioteke. Če je argument pot in popolno ime datoteke, bo datoteka datoteke iskala tam. Če pa je argument skrajšano ime, bo metoda zahteva poiskala več vnaprej določenih imenikov v vašem sistemu za to datoteko. Uporaba skrajšanega imena je najpogostejši način uporabe metode zahteva.

Naslednji primer prikazuje, kako uporabljati zahtevek. Datoteka

instagram viewer
test_library.rb je v prvem bloku kode. Ta datoteka natisne sporočilo in definira nov razred. Drugi blok kod je datoteka test_program.rb. Ta datoteka naloži datoteko test_library.rb datoteko z uporabo metodequiremethod in ustvari novo TestClass objekt.

postavi "testna knjižnica vključena"
razred TestClass
def inicializirati
postavi "TestClass objekt ustvarjen"
konec
konec
#! / usr / bin / env rubin
zahtevajo 'test_library.rb'
t = TestClass.new

Izogibajte se spopadom z imenom

Pri pisanju komponent za večkratno uporabo je najbolje, da veliko spremenljivk v globalnem obsegu ne prijavite zunaj nobenih razredov ali metod ali z uporabo $ predpono. To naj bi preprečilo nekaj, imenovano "onesnaževanje imenskega prostora. "Če prijavite preveč imen, lahko drug program ali knjižnica razglasi isto ime in povzroči spopad imena. Ko dve popolnoma nepovezani knjižnici začneta po naključju spreminjati spremenljivke, se bodo stvari zlomile - na videz naključno. To je zelo težko hrošče, ki ga je mogoče izslediti in je najbolje, da se mu le izognete.

Če se želite izogniti spopadom z imeni, lahko vse v svoji knjižnici priložite znotraj modul izjava. To bo zahtevalo, da se ljudje sklicujejo na vaše razrede in metode s popolnoma kvalificiranim imenom, kot je MyLibrary:: my_method, vendar je vredno, saj spopadov z imeni na splošno ne bo. Ljudje, ki želijo imeti vsa imena vaših razredov in metod v globalnem obsegu, lahko to storijo z uporabo vključujejo izjava.

Naslednji primer ponavlja prejšnji primer, vendar vse zajema v a Moja knjižnica modul. Dve različici my_program.rb so podani; tisto, ki uporablja vključujejo izjavo in eno, ki ne.

postavi "testna knjižnica vključena"
modul MyLibrary
razred TestClass
def inicializirati
postavi "TestClass objekt ustvarjen"
konec
konec
konec
#! / usr / bin / env rubin
zahtevajo 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env rubin
zahtevajo 'test_library2.rb'
vključujejo MyLibrary
t = TestClass.new

Izogibajte se absolutnih poti

Ker se komponente za večkratno uporabo pogosto premaknejo, je tudi najbolje, da pri klicih, ki jih potrebujete, ne uporabljate absolutnih poti. Absolutna pot je takšna pot /home/user/code/library.rb. Opazili boste, da mora biti datoteka na tem natančnem mestu, da lahko deluje. Če se skript kdaj premakne ali se vaš domači imenik kadar koli spremeni, bo zahtevana izjava prenehala delovati.

Namesto absolutnih poti je pogosto običajno ustvariti ./lib v imeniku vašega programa Ruby. The ./lib je dodan v $ LOAD_PATH spremenljivka, ki shranjuje imenike, v katerih zahtevana metoda išče datoteke Ruby. Po tem, če datoteka my_library.rb je shranjena v imeniku lib, z njo se lahko naloži v vaš program zahtevajo 'my_library' izjava.

Naslednji primer je enak prejšnjemu test_program.rb primeri. Vendar predvideva test_library.rb datoteka je shranjena v ./lib imenik in ga naloži z zgoraj opisano metodo.

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