Просто сделай это:
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, с большей вероятностью сохранятся со временем.