Просто сделайте это:
require_relative 'tokenizer'
Если вы поместите это в файл Ruby, который находится в том же каталоге, что и tokenizer.rb
, он будет работать нормально, независимо от того, какой у вас текущий рабочий каталог (CWD)..
Объяснение того, почему это лучший способ
В других ответах утверждается, что вы должны использовать require './tokenizer'
, но это неправильный ответ, потому что он будет работать толькоесли вы запускаете ваш Ruby-процесс в том же каталоге, в котором находится tokenizer.rb
. Практически единственная причина, по которой стоит использовать require
, - это если вам нужна поддержка Ruby 1.8, в которой нет require_relative
.
Ответ require './tokenizer'
может работать для вас сегодня, но он излишне ограничивает способы запуска кода на Ruby.Завтра, если вы хотите переместить ваши файлы в другой каталог или просто хотите запустить процесс Ruby из другого каталога, вам придется переосмыслить все эти операторы require
.
Использование require
получить доступ к файлам, находящимся на пути загрузки, - хорошая вещь, и гемы Ruby делают это постоянно.Но вы не должны начинать аргумент с require
с .
, если вы не делаете что-то особенное и не знаете, что делаете.
Когда вы пишете код, который делает предположения относительно его среды, вы должнытщательно продумайте, какие предположения сделать.В этом случае существует три различных способа требовать файл tokenizer
, и каждый из них предполагает разные предположения:
require_relative 'path/to/tokenizer'
: Предполагается, что относительный путь между двумя исходными файлами Rubyостанется прежним. require 'path/to/tokenizer'
: Предполагается, что path/to/tokenizer
находится в одном из каталогов на пути загрузки ($LOAD_PATH
).Как правило, для этого требуется дополнительная настройка, поскольку вам необходимо что-то добавить к пути загрузки. require './path/to/tokenizer'
: Предполагается, что относительный путь от текущего рабочего каталога процесса Ruby к tokenizer.rb
останется прежним.
Я думаю, что для большинства людей и большинства ситуаций предположения, сделанные в вариантах № 1 и № 2, с большей вероятностью сохранятся со временем.