Metoden "Krev" i Ruby

For å lage gjenbrukbare komponenter, de som lett kan brukes i andre programmer, må et programmeringsspråk ha en måte å jevnlig importere den koden på. I Rubin, den krever metoden brukes til å laste inn en annen fil og utføre alle dens uttalelser. Dette tjener til å importere all klasse og metode definisjoner i filen. I tillegg til å bare utføre alle utsagnene i filen, holder også metoden oversikt over hvilke filer som tidligere har vært påkrevd, og vil derfor ikke kreve en fil to ganger.

Bruke metoden "krever"

Nødvendig-metoden tar navnet på filen du trenger, som en string, som et enkelt argument. Dette kan enten være en bane til filen, for eksempel ./lib/some_library.rb eller et forkortet navn, som f.eks some_library. Hvis argumentet er en bane og et fullstendig filnavn, vil metoden som kreves lete der etter filen. Hvis argumentet er et forkortet navn, vil imidlertid metoden søke gjennom et antall forhåndsdefinerte kataloger på systemet ditt etter den filen. Å bruke det forkortede navnet er den vanligste måten å bruke på-metoden.

instagram viewer

Følgende eksempel viser hvordan du bruker påstanden. Filen test_library.rb er i den første kodeblokken. Denne filen skriver ut en melding og definerer en ny klasse. Den andre kodeblokken er filen test_program.rb. Denne filen laster inn filen test_library.rb fil ved å bruke det spørsmålet og opprette en ny TestClass gjenstand.

setter "test_library inkludert"
klasse TestClass
def initialisere
setter "TestClass-objekt opprettet"
slutt
slutt
#! / usr / bin / env ruby
krever 'test_library.rb'
t = TestClass.new

Unngå navnekollisjoner

Når du skriver gjenbrukbare komponenter, er det best å ikke deklarere mange variabler i det globale omfanget utenfor noen klasser eller metoder eller ved å bruke $ prefiks. Dette er for å forhindre noe som heter "navneforurensning. "Hvis du erklærer for mange navn, kan et annet program eller bibliotek erklære det samme navnet og forårsake et navnsammenstøt. Når to helt ubeslektede biblioteker begynner å endre hverandres variabler ved et uhell, vil ting bryte - tilsynelatende tilfeldig. Dette er en veldig vanskelig feil å spore opp, og det er best bare å unngå det.

For å unngå navnsammenstøt kan du legge ved alt i biblioteket ditt inne i et modul uttalelse. Dette vil kreve at folk refererer til klassene og metoden din med et fullt kvalifisert navn som MyLibrary:: my_method, men det er verdt det siden sammenstøt av navn generelt ikke vil forekomme. For folk som vil ha alle klassene og metodene dine i det globale omfanget, kan de gjøre det ved å bruke inkludere uttalelse.

Følgende eksempel gjentar det forrige eksemplet, men omslutter alt i a MyLibrary modul. To versjoner av my_program.rb er gitt; en som bruker inkludere uttalelse og en som ikke gjør det.

setter "test_library inkludert"
modul MyLibrary
klasse TestClass
def initialisere
setter "TestClass-objekt opprettet"
slutt
slutt
slutt
#! / usr / bin / env ruby
krever 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
krever 'test_library2.rb'
inkluderer MyLibrary
t = TestClass.new

Unngå absolutte stier

Fordi gjenbrukbare komponenter ofte blir flyttet rundt, er det også best å ikke bruke absolutte baner i dine anrop. En absolutt vei er en vei som /home/user/code/library.rb. Du vil merke at filen må være på det nøyaktige stedet for å fungere. Hvis skriptet noen gang blir flyttet eller hjemmekatalogen din endres, vil uttrykkelige krav slutte å fungere.

I stedet for absolutte veier, er det ofte vanlig å lage en ./lib katalog i Ruby-programmets katalog. De ./lib katalogen er lagt til i $ LOAD_PATH variabel som lagrer katalogene der metoden krever søk etter Ruby-filer. Etter det, hvis filen my_library.rb er lagret i lib-katalogen, kan den lastes inn i programmet ditt med en enkel krever "my_library" uttalelse.

Følgende eksempel er det samme som det forrige test_program.rb eksempler. Imidlertid forutsetter den test_library.rb filen er lagret i ./lib katalog og laster den ved hjelp av metoden beskrevet ovenfor.

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