Просто зробіть це:
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, швидше за все справджуються з часом.