Po prostu zrób to:
require_relative 'tokenizer'
Jeśli umieścisz to w pliku Ruby, który znajduje się w tym samym katalogu, co tokenizer.rb
, będzie działać dobrze bez względu na twój bieżący katalog roboczy (CWD).
Wyjaśnienie, dlaczego jest to najlepszy sposób
Inne odpowiedzi twierdzą, że powinieneś użyć require './tokenizer'
, ale to jest zła odpowiedź, ponieważ będzie działać tylko wtedy, gdy uruchomisz swój proces Ruby w tym samym katalogu, w którym się tokenizer.rb
znajduje. Prawie jedynym powodem do rozważenia użycia require
takiego byłoby, gdybyś musiał obsługuje Ruby 1.8, który nie ma require_relative
.
require './tokenizer'
Odpowiedź może pracować dla Ciebie dzisiaj, ale niepotrzebnie ogranicza w jaki sposób można uruchomić kod Ruby. Jutro, jeśli zechcesz przenieść swoje pliki do innego katalogu lub po prostu zechcesz rozpocząć proces w Ruby z innego katalogu, będziesz musiał przemyśleć wszystkie te require
instrukcje.
Korzystanie require
z dostępu do plików znajdujących się na ścieżce ładowania to dobra rzecz, a klejnoty Rubiego robią to przez cały czas. Ale nie powinieneś zaczynać kłótni require
od a, .
chyba że robisz coś wyjątkowego i nie wiesz, co robisz.
Kiedy piszesz kod, który przyjmuje założenia dotyczące swojego środowiska, powinieneś dokładnie przemyśleć, jakie założenia przyjąć. W takim przypadku istnieją trzy różne sposoby żądania tokenizer
pliku, a każdy z nich przyjmuje inne założenie:
require_relative 'path/to/tokenizer'
: Zakłada, że względna ścieżka między dwoma źródłowymi plikami Ruby pozostanie taka sama.
require 'path/to/tokenizer'
: Zakłada, że path/to/tokenizer
znajduje się w jednym z katalogów na ścieżce ładowania ( $LOAD_PATH
). Zwykle wymaga to dodatkowej konfiguracji, ponieważ musisz coś dodać do ścieżki ładowania.
require './path/to/tokenizer'
: Zakłada, że ścieżka względna z bieżącego katalogu roboczego procesu Ruby tokenizer.rb
do pozostanie taka sama.
Myślę, że dla większości ludzi i większości sytuacji założenia przyjęte w opcjach nr 1 i nr 2 z większym prawdopodobieństwem sprawdzą się z upływem czasu.