Apenas faça o seguinte:
require_relative 'tokenizer'
Se você colocar isso em um arquivo Ruby que esteja no mesmo diretório que tokenizer.rb
, ele funcionará bem, independentemente do seu diretório de trabalho atual (CWD).
Explicação de por que essa é a melhor maneira
As outras respostas afirmam que você deve usar require './tokenizer'
, mas essa é a resposta errada , porque só funcionará se você executar o processo Ruby no mesmo diretório em que tokenizer.rb
está. O único motivo para considerar o uso require
desse tipo seria se você precisar suporta Ruby 1.8, que não possui require_relative
.
A require './tokenizer'
resposta pode funcionar para você hoje, mas limita desnecessariamente as maneiras pelas quais você pode executar seu código Ruby. Amanhã, se você deseja mover seus arquivos para um diretório diferente, ou apenas deseja iniciar seu processo Ruby a partir de um diretório diferente, precisará repensar todas essas require
instruções.
Usar require
para acessar arquivos que estão no caminho de carregamento é uma coisa boa e as gemas Ruby fazem isso o tempo todo. Mas você não deve iniciar o argumento require
com a .
menos que esteja fazendo algo muito especial e saiba o que está fazendo.
Ao escrever um código que faça suposições sobre seu ambiente, você deve pensar cuidadosamente sobre quais suposições devem ser feitas. Nesse caso, existem até três maneiras diferentes de exigir o tokenizer
arquivo e cada uma faz uma suposição diferente:
require_relative 'path/to/tokenizer'
: Assume que o caminho relativo entre os dois arquivos de origem Ruby permanecerá o mesmo.
require 'path/to/tokenizer'
: Assume que path/to/tokenizer
está dentro de um dos diretórios no caminho de carregamento ( $LOAD_PATH
). Isso geralmente requer configuração extra, pois você precisa adicionar algo ao caminho de carregamento.
require './path/to/tokenizer'
: Assume que o caminho relativo do diretório de trabalho atual do processo Ruby tokenizer.rb
permanecerá o mesmo.
Penso que, para a maioria das pessoas e para a maioria das situações, é mais provável que as suposições feitas nas opções 1 e 2 sejam verdadeiras ao longo do tempo.