Metoda „Vyžadovat“ v Ruby

click fraud protection

Aby bylo možné vytvořit opakovaně použitelné součásti, které lze snadno použít v jiných programech, musí mít programovací jazyk nějaký způsob, jak tento kód hladce importovat za běhu. v Rubín, vyžadovat metoda se používá k načtení jiného souboru a provedení všech jeho souborů prohlášení. Slouží k importu všech tříd a metoda definice v souboru. Metoda požadavku kromě jednoduchého vykonávání všech příkazů v souboru sleduje i to, které soubory byly dříve vyžadovány, a nebude tedy vyžadovat soubor dvakrát.

Pomocí metody „vyžadovat“

Metoda požadavku bere název souboru, který vyžaduje, jako tětiva, jako jediný argument. Může to být buď cesta k souboru, například ./lib/some_library.rb nebo zkrácené jméno, např some_library. Je-li argumentem cesta a úplný název souboru, metoda požadavku tam vyhledá soubor. Pokud je však argument zkrácený název, bude metoda prohledávat soubor v předdefinovaných adresářích ve vašem systému. Použití zkráceného názvu je nejběžnějším způsobem použití metody vyžadovat.

instagram viewer

Následující příklad demonstruje použití příkazu požadavku. Soubor test_library.rb je v prvním kódovém bloku. Tento soubor vytiskne zprávu a definuje novou třídu. Druhý kódový blok je soubor test_program.rb. Tento soubor načte test_library.rb soubor pomocí tamquiremethod a vytvoří nový TestClass objekt.

vloží „test_library included“
třída TestClass
def inicializovat
vloží "TestClass objekt vytvořen"
konec
konec
#! / usr / bin / env ruby
vyžadují 'test_library.rb'
t = TestClass.new

Vyhněte se střetům jmen

Při psaní opakovaně použitelných komponent je nejlepší deklarovat mnoho proměnných v globálním rozsahu mimo jakékoli třídy nebo metody nebo pomocí $ předpona. Tím se má zabránit tomu, co se nazývá „znečištění jmenným prostorem"Pokud deklarujete příliš mnoho jmen, může jiný program nebo knihovna deklarovat stejné jméno a způsobit střet jmen." Když dvě zcela nesouvisející knihovny začnou náhodně měnit proměnné druhé, věci se zlomí - zdánlivě náhodně. Je to velmi obtížná chyba, kterou lze vystopovat, a je nejlepší se jí vyhnout.

Chcete-li se vyhnout střetům se jmény, můžete do knihovny vložit vše uvnitř knihovny modul tvrzení. To bude vyžadovat, aby lidé odkazovali na vaše třídy a metody pomocí plně kvalifikovaného jména, jako je MyLibrary:: my_method, ale stojí to za to, protože ke střetům jmen obvykle nedojde. Pro lidi, kteří chtějí mít všechna vaše jména tříd a metod v globálním rozsahu, mohou to udělat pomocí zahrnout tvrzení.

Následující příklad opakuje předchozí příklad, ale uzavírá vše v a MyLibrary modul. Dvě verze my_program.rb jsou uvedeny; ten, který používá zahrnout prohlášení a ten, který ne.

vloží „test_library included“
modul MyLibrary
třída TestClass
def inicializovat
vloží "TestClass objekt vytvořen"
konec
konec
konec
#! / usr / bin / env ruby
vyžadují 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
vyžadují 'test_library2.rb'
patří MyLibrary
t = TestClass.new

Vyhněte se absolutním cestám

Vzhledem k tomu, že opakovaně použitelné součásti se často pohybují, je také nejlepší nepoužívat absolutní cesty ve vašich požadavcích na volání. Absolutní cesta je cesta jako /home/user/code/library.rb. Zjistíte, že soubor musí být na tomto přesném místě, aby mohl fungovat. Pokud je skript přesunut nebo se váš domovský adresář někdy změní, přestane to vyžadovat příkaz.

Místo absolutních cest je často běžné vytvořit ./lib adresář v adresáři vašeho programu Ruby. ./lib adresář je přidán do $ LOAD_PATH proměnná, která ukládá adresáře, ve kterých metoda vyžaduje vyhledávání souborů Ruby. Poté, pokud soubor my_library.rb je uložen v adresáři lib, lze jej jednoduše načíst do programu vyžadují 'my_library' tvrzení.

Následující příklad je stejný jako předchozí test_program.rb příklady. Předpokládá však test_library.rb soubor je uložen v ./lib adresář a načte jej pomocí výše popsané metody.

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