Metóda „Vyžadovať“ v Ruby
John Lamb/Photographer's Choice RF/Getty Images
Na vytvorenie opakovane použiteľných komponentov, ktoré možno ľahko použiť v iných programoch, musí mať programovací jazyk nejaký spôsob, ako tento kód plynulo importovať za behu. InRuby, vyžadovať metóda sa používa na načítanie iného súboru a vykonanie všetkých jeho Vyhlásenia . Slúži na import všetkých tried a metóda definície v súbore. Okrem jednoduchého vykonania všetkých príkazov v súbore, metóda require tiež sleduje, ktoré súbory boli predtým požadované, a preto nebude vyžadovať súbor dvakrát.
Použitie metódy „vyžadovať“.
Metóda require berie názov súboru, ktorý sa má vyžadovať, ako a reťazec , ako jediný argument. Môže to byť buď cesta k súboru, ako napr ./lib/some_library.rb alebo skrátený názov, ako napr nejaká_knižnica . Ak je argumentom cesta a úplný názov súboru, požadovaná metóda tam vyhľadá súbor. Ak je však argumentom skrátený názov, metóda require vyhľadá daný súbor v množstve preddefinovaných adresárov vo vašom systéme. Použitie skráteného názvu je najbežnejším spôsobom použitia metódy require.
Nasledujúci príklad ukazuje, ako použiť príkaz require. Súbor test_knižnica.rb je v prvom bloku kódu. Tento súbor vytlačí správu a definuje novú triedu. Druhý blok kódu je súbor testovací_program.rb . Tento súbor načíta súbor test_knižnica.rb súbor pomocou vyžadovať metódu a vytvorí novú TestClass objekt.
vloží 'test_library included'
trieda TestClass
def inicializovať
vloží 'TestClass objekt vytvorený'
koniec
koniec
#!/usr/bin/env ruby
vyžadovať 'test_library.rb'
t = TestClass.new
Vyhnite sa stretom mien
Pri písaní opakovane použiteľných komponentov je najlepšie nedeklarovať veľa premenných v globálnom rozsahu mimo akýchkoľvek tried alebo metód alebo pomocou $ predpona. Toto má zabrániť niečomu, čo sa nazýva „ znečistenie menného priestoru .' Ak deklarujete príliš veľa mien, iný program alebo knižnica môže deklarovať rovnaký názov a spôsobiť kolíziu mien. Keď dve úplne nesúvisiace knižnice začnú náhodne meniť svoje premenné, veci sa pokazia - zdanlivo náhodne. Túto chybu je veľmi ťažké vystopovať a je najlepšie sa jej vyhnúť.
Aby ste sa vyhli konfliktom mien, môžete všetko vo svojej knižnici uzavrieť do súboru a modul vyhlásenie. To bude vyžadovať, aby ľudia odkazovali na vaše triedy a metódu plne kvalifikovaným názvom, ako napr MyLibrary::my_method , ale stojí to za to, pretože kolízie mien vo všeobecnosti nenastanú. Pre ľudí, ktorí chcú mať všetky vaše názvy tried a metód v globálnom rozsahu, to môžu urobiť pomocou zahŕňajú vyhlásenie.
Nasledujúci príklad opakuje predchádzajúci príklad, ale uzatvára všetko v a MyLibrary modul. Dve verzie my_program.rb sú dané; ten, ktorý používa zahŕňajú vyhlásenie a také, ktoré nie.
vloží 'test_library included'
modul MyLibrary
trieda TestClass
def inicializovať
vloží 'TestClass objekt vytvorený'
koniec
koniec
koniec
#!/usr/bin/env ruby
vyžadovať 'test_library2.rb'
t = MyLibrary::TestClass.new
#!/usr/bin/env ruby
vyžadovať 'test_library2.rb'
zahŕňajú MyLibrary
t = TestClass.new
Vyhnite sa Absolútnym cestám
Pretože opakovane použiteľné komponenty sa často presúvajú, je tiež najlepšie nepoužívať absolútne cesty vo vašich požadovaných volaniach. Absolútna cesta je cesta podobná /home/user/code/library.rb . Všimnete si, že súbor musí byť presne na tomto mieste, aby fungoval. Ak sa skript niekedy presunie alebo sa niekedy zmení váš domovský adresár, príkaz, ktorý vyžaduje, prestane fungovať.
Namiesto absolútnych ciest je často bežné vytvárať a ./lib v adresári vášho programu Ruby. The ./lib adresár sa pridá do $LOAD_PATH premenná, ktorá ukladá adresáre, v ktorých požadovaná metóda hľadá súbory Ruby. Po tom, ak súbor moja_knižnica.rb je uložený v adresári lib, dá sa jednoducho nahrať do vášho programu vyžadovať 'my_library' vyhlásenie.
Nasledujúci príklad je rovnaký ako predchádzajúci testovací_program.rb príklady. Predpokladá sa však, že test_knižnica.rb súbor je uložený v ./lib adresár a načíta ho pomocou metódy opísanej vyššie.
#!/usr/bin/env ruby
$LOAD_PATH<< './lib'
vyžadovať 'test_library.rb'
t = TestClass.new