Metoda „Cer” în Rubin

Pentru a crea componente refolosibile, care pot fi utilizate cu ușurință în alte programe, un limbaj de programare trebuie să aibă un mod de a importa fără probleme acel cod în timp de execuție. În Ruby, necesita metoda este folosită pentru a încărca un alt fișier și pentru a executa toate declarațiile sale. Aceasta servește la importul tuturor definițiilor de clasă și metodă din fișier. În plus față de executarea simplă a tuturor declarațiilor din fișier, metoda request ține evidența și a fișierelor care au fost solicitate anterior și, astfel, nu va necesita un fișier de două ori.

Folosind metoda „cere”

Metoda require ia numele fișierului pentru a solicita, ca șir, un singur argument. Aceasta poate fi fie o cale către fișier, cum ar fi ./lib/some_library.rb sau un nume scurtat, cum ar fi some_library. Dacă argumentul este o cale și un nume complet de fișier, metoda solicită va căuta fișierul acolo. Cu toate acestea, dacă argumentul este un nume scurtat, metoda Requir va căuta într-o serie de directoare predefinite din sistemul dvs. pentru acel fișier. Utilizarea numelui scurtat este cea mai obișnuită modalitate de utilizare a metodei require.

Următorul exemplu demonstrează modul de utilizare a instrucțiunii request. Fișierul test_library.rb se află în primul bloc de cod. Acest fișier tipărește un mesaj și definește o nouă clasă. Al doilea bloc de cod este fișierul test_program.rb. Acest fișier încarcă test_library.rb cu fișierulnecesitametodă și creează o nouă TestClass obiect.

pune „test_library inclus”
clasa TestClass
def inițializează
pune „obiectul TestClass creat”
Sfârșit
Sfârșit
#! / usr / bin / env ruby
necesită „test_library.rb”
t = TestClass.new

Evitați confruntările cu numele

Când scrieți componente refolosibile, este mai bine să nu declarați multe variabile din sfera globală în afara niciunei clase sau metode sau utilizând $ prefix. Aceasta pentru a preveni ceva numit „poluarea spațiului de nume”. Dacă declarați prea multe nume, un alt program sau bibliotecă poate declara același nume și poate provoca o ciocnire a numelor. Când două biblioteci complet fără legătură încep să schimbe variabilele reciproc accidental, lucrurile se vor rupe - aparent la întâmplare. Acesta este un bug foarte dificil de urmărit și cel mai bine este să îl evitați.

Pentru a evita confruntările cu numele, puteți adăuga totul în biblioteca dvs. în interiorul unei instrucțiuni a modulului. Acest lucru va solicita persoanelor să se refere la clasele și metoda dvs. cu un nume complet calificat, cum ar fi MyLibrary :: my_method, dar merită, deoarece în general nu se vor produce ciocniri cu numele. Pentru persoanele care doresc să aibă toate clasele și numele metodei în sfera globală, pot face acest lucru folosind funcția include afirmație.

Următorul exemplu repetă exemplul precedent, dar cuprinde totul în a Biblioteca mea modul. Două versiuni de my_program.rb sunt date; unul care folosește include declarație și una care nu.

pune „test_library inclus”
modul MyLibrary
clasa TestClass
def inițializează
pune „obiectul TestClass creat”
Sfârșit
Sfârșit
Sfârșit
#! / usr / bin / env ruby
necesită „test_library2.rb”
t = MyLibrary :: TestClass.new
#! / usr / bin / env ruby
necesită „test_library2.rb”
include MyLibrary
t = TestClass.new

Evitați căile absolute

Deoarece componentele reutilizabile sunt adesea mutate, este de asemenea cel mai bine să nu utilizați căi absolute în apelurile dvs. solicitate. O cale absolută este o cale ca. /home/user/code/library.rb. Veți observa că fișierul trebuie să fie în acea locație exactă pentru a putea funcționa. Dacă scriptul este mutat vreodată sau directorul de acasă se schimbă vreodată, acea declarație necesară va înceta.

În loc de căi absolute, este adesea obișnuit să creezi o ./ lib în directorul programului dvs. Ruby. ./ lib directorul este adăugat la $ LOAD_PATH variabilă care stochează directoarele în care metoda necesită caută fișiere Ruby. După aceea, dacă fișierul my_library.rb este stocat în directorul lib, poate fi încărcat în programul dvs. cu un simplu necesită „my_library” afirmație.

Următorul exemplu este același cu cel precedent test_program.rb exemple. Cu toate acestea, presupune că test_library.rb fișierul este stocat în ./ lib director și îl încarcă folosind metoda descrisă mai sus.

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