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