Metoda „Wymagaj” w Ruby

Zbliżenie na klawiaturę

John Lamb/Photographer's Choice RF/Getty Images





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

Korzystanie z metody „wymagaj”

Metoda require przyjmuje nazwę wymaganego pliku, jako strunowy , jako pojedynczy argument. Może to być ścieżka do pliku, na przykład ./lib/jakaś_biblioteka.rb lub skróconą nazwę, taką jak jakaś_biblioteka . Jeśli argumentem jest ścieżka i pełna nazwa pliku, metoda require będzie szukała tam pliku. Jeśli jednak argument jest skróconą nazwą, metoda require przeszuka kilka predefiniowanych katalogów w systemie w poszukiwaniu tego pliku. Używanie skróconej nazwy jest najczęstszym sposobem używania metody require.



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ą wymagać metody i tworzy nową Klasa testowa obiekt.

umieszcza 'test_library w zestawie'
klasa TestKlasa
definiuj inicjalizuj
umieszcza 'utworzony obiekt TestClass'
koniec
koniec
#!/usr/bin/env ruby
wymagaj pliku „test_library.rb”
t = TestClass.nowy

Unikaj starć imion

Pisząc komponenty wielokrotnego użytku, najlepiej nie deklarować wielu zmiennych w zasięgu globalnym poza klasami lub metodami lub za pomocą $ prefiks. Ma to zapobiec czemuś, co nazywa się „ 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 zupełnie niepowiązane ze sobą biblioteki zaczną przypadkowo zmieniać swoje zmienne, wszystko się zepsuje – pozornie losowo. Jest to bardzo trudny do wyśledzenia błąd i najlepiej po prostu go unikać.



Aby uniknąć kolizji nazw, możesz umieścić wszystko w swojej bibliotece wewnątrz moduł oświadczenie. Będzie to wymagało od ludzi odwoływania się do twoich klas i metod pod w pełni kwalifikowaną nazwą, taką jak MojaBiblioteka::moja_metoda , ale warto, ponieważ starcia nazw zazwyczaj się nie zdarzają. Osoby, które chcą mieć wszystkie nazwy klas i metod w zasięgu globalnym, mogą to zrobić za pomocą włączać oświadczenie.

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

umieszcza 'test_library w zestawie'
moduł MojaBiblioteka
klasa TestKlasa
definiuj inicjalizuj
umieszcza 'utworzony 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”
uwzględnij MyLibrary
t = TestClass.nowy

Unikaj absolutnych ścieżek

Ponieważ komponenty wielokrotnego użytku często są przemieszczane, najlepiej jest również nie używać ścieżek bezwzględnych w wywołaniach wymaganych. Ścieżka absolutna to taka ścieżka /home/user/code/library.rb . Zauważysz, że plik musi znajdować się w tej dokładnej lokalizacji, aby działał. Jeśli skrypt zostanie kiedykolwiek przeniesiony lub twój katalog domowy kiedykolwiek się zmieni, to polecenie require przestanie działać.

Zamiast bezwzględnych ścieżek często tworzy się ./lib w katalogu twojego programu Ruby. The ./lib katalog zostanie dodany do $LOAD_PATH zmienna przechowująca katalogi, w których metoda require wyszukuje pliki Ruby. Po tym, jeśli plik moja_biblioteka.rb jest przechowywany w katalogu lib, można go załadować do programu za pomocą prostego wymagaj „moja_biblioteka” oświadczenie.



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

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