Подтвердить что ты не робот

Ruby требует пути

У меня есть код Ruby с разными классами в нескольких файлах. В одном файле я запускаю выполнение. Этот файл require мои другие файлы.

  • Это хороший способ запустить рубиновый код?
  • Когда я запускаю код из символической ссылки, например, DIR2/MyRubyCode является ссылкой на основной файл DIR1/MyRubyCode.rb, тогда мои запросы будут сбой. Я решил проблему, добавив путь DIR1 в $LOAD_PATH до require, но я думаю, что было бы намного лучше сделать это. У вас есть какие-либо предложения по этому поводу?
4b9b3361

Ответ 1

Если вы хотите проверить, является ли файл Ruby "require" ed или выполнен с помощью "ruby MyRubyCode.rb", проверьте константу __FILE__.

# If the first argument to `ruby` is this file.
if $0 == __FILE__
  # Execute some stuff.
end

Что касается проблемы require/$LOAD_PATH, вы всегда можете использовать относительный путь в инструкции require. Например:

# MyRubyCode.rb
require "#{File.dirname(__FILE__)}/foo_class"
require "#{File.dirname(__FILE__)}/bar_module"

Что будет включать файлы foo_class.rb и bar_module.rb в том же каталоге, что и MyRubyCode.rb.

Ответ 2

Если вы используете Ruby версии 1.9 или выше, пользователю требуется относительная для ваших зависимостей.

require_relative 'foo_class'
require_relative 'bar_module'

Ответ 3

Я знаю, что это старый вопрос, но есть обновленный ответ на него, и я хотел бы опубликовать его:

Начиная с более поздней версии Ruby (я не уверен, когда), вы можете потребовать файлы в том же каталоге, используя следующее:

require './foo_class'
require './bar_module'

и он загрузит файлы с именем foo_class.rb и bar_module.rb в тот же каталог.

Для проверки того, был ли ваш файл require d или запущен нормально, проверьте другой ответ.