Metoda „Wymagaj” w Rubim

Aby stworzyć komponenty wielokrotnego użytku, które można łatwo wykorzystać w innych programach, język programowania musi mieć sposób na płynne importowanie tego kodu w czasie wykonywania. W Rubin, wymagać Metoda służy do załadowania innego pliku i wykonania wszystkich jego plików sprawozdania. Służy to do importowania wszystkich klas i metoda definicje w pliku. Oprócz zwykłego wykonania wszystkich instrukcji w pliku, metoda wymagająca śledzi również, które pliki były wcześniej wymagane, a zatem nie będzie wymagać pliku dwukrotnie.

Korzystanie z metody „wymaganej”

Metoda wymagająca przyjmuje nazwę wymaganego pliku jako strunowy, jako pojedynczy argument. Może to być ścieżka do pliku, na przykład ./lib/some_library.rb lub skróconą nazwę, taką jak biblioteka. Jeśli argumentem jest ścieżka i pełna nazwa pliku, metoda wymagająca szuka tam pliku. Jeśli jednak argumentem jest skrócona nazwa, metoda wymaga przeszuka wiele wstępnie zdefiniowanych katalogów w systemie w poszukiwaniu tego pliku. Używanie skróconej nazwy jest najczęstszym sposobem korzystania z metody wymaganej.

instagram viewer

Poniższy przykład pokazuje, jak używać instrukcji Require. Plik test_library.rb znajduje się w pierwszym bloku kodu. Ten plik drukuje wiadomość i definiuje nową klasę. Drugi blok kodu to plik test_program.rb. Ten plik ładuje test_library.rb plik za pomocą metody ifquiremethod i tworzy nowy TestClass obiekt.

wstawia „dołączono bibliotekę testową”
klasa TestClass
def zainicjować
wstawia „Utworzono obiekt TestClass”
koniec
koniec
#! / usr / bin / env ruby
wymagają „test_library.rb”
t = TestClass.new

Unikaj konfliktów nazw

Pisząc komponenty wielokrotnego użytku, najlepiej nie deklarować wielu zmiennych w zasięgu globalnym poza jakimikolwiek klasami lub metodami lub za pomocą $ prefiks. Ma to na celu uniknięcie czegoś o nazwie „zanieczyszczenie przestrzeni nazw"Jeśli zadeklarujesz zbyt wiele nazw, inny program lub biblioteka może zadeklarować tę samą nazwę i spowodować konflikt nazw. Kiedy dwie całkowicie niezwiązane biblioteki zaczną się przypadkowo zmieniać zmienne, rzeczy się zepsują - na pozór losowo. Jest to bardzo trudny błąd do wyśledzenia i najlepiej go uniknąć.

Aby uniknąć konfliktów nazw, możesz zawrzeć wszystko w bibliotece wewnątrz pliku moduł komunikat. Będzie to wymagało od osób odwoływania się do twoich klas i metod pod w pełni kwalifikowaną nazwą, np MyLibrary:: my_method, ale warto, ponieważ konflikty nazw zwykle nie występują. Dla osób, które chcą mieć wszystkie nazwy klas i metod w zasięgu globalnym, mogą to zrobić za pomocą zawierać komunikat.

Poniższy przykład powtarza poprzedni przykład, ale obejmuje wszystko w Moja Biblioteka moduł. Dwie wersje mój_program.rb są podane; taki, który używa zawierać oświadczenie i takie, które nie.

wstawia „dołączono bibliotekę testową”
moduł MyLibrary
klasa TestClass
def zainicjować
wstawia „Utworzono obiekt TestClass”
koniec
koniec
koniec
#! / usr / bin / env ruby
wymagają „test_library2.rb”
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
wymagają „test_library2.rb”
obejmują MyLibrary
t = TestClass.new

Unikajcie Absolutnych Ścieżek

Ponieważ komponenty wielokrotnego użytku często się przemieszczają, najlepiej też nie używać bezwzględnych ścieżek w żądanych połączeniach. Ścieżka absolutna jest ścieżką podobną do /home/user/code/library.rb. Zauważysz, że plik musi znajdować się dokładnie w tej lokalizacji, aby działać. Jeśli skrypt zostanie kiedykolwiek przeniesiony lub katalog domowy kiedykolwiek się zmieni, to wymagająca instrukcja przestanie działać.

Zamiast ścieżek bezwzględnych często tworzy się plik ./lib katalog w katalogu twojego programu Ruby. The ./lib katalog zostanie dodany do $ LOAD_PATH zmienna przechowująca katalogi, w których metoda wymaga wyszukuje pliki Ruby. Następnie, jeśli plik my_library.rb jest przechowywany w katalogu lib, można go w prosty sposób załadować do programu wymagają „mojej_biblioteki” komunikat.

Poniższy przykład jest taki sam jak poprzedni test_program.rb przykłady Zakłada jednak test_library.rb plik jest przechowywany w ./lib i ładuje go przy użyciu metody opisanej powyżej.

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