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

Загрузка работает на локальном пути, требуется не

loadee.rb

puts '> This is the second file.'

loaddemo.rb

puts 'This is the first (master) program file.'
load 'loadee.rb'
puts 'And back again to the first file.'

Когда я запускаю "ruby loaddemo.rb", это отлично работает. Оба файла находятся в том же каталоге и что я запускал каталог.

Но если я меняю нагрузку на требование, и с расширением или без него получаю:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load
 -- loadee.rb (LoadError)
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from loaddemo.rb:2:in `<main>'

Мой вопрос, конечно, почему в этом случае не требуется работать? Он должен, верно? Нужно ли загружать и использовать разные пути?

Ruby version 1.9.2

4b9b3361

Ответ 1

Если вы укажете только имя файла require, оно будет отображаться только в предопределенных каталогах $LOAD_PATH. Однако, если вы указали путь с вашим именем файла, он должен работать:

puts 'This is the first (master) program file.'
require './loadee.rb'
puts 'And back again to the first file.'

Вместо этого вы можете добавить папку проекта в путь загрузки:

$LOAD_PATH.unshift File.dirname(__FILE__)
puts 'This is the first (master) program file.'
require 'loadee.rb'
puts 'And back again to the first file.'

И последнее, вы можете просто использовать require_relative вместо этого:

puts 'This is the first (master) program file.'
require_relative 'loadee.rb'
puts 'And back again to the first file.'

Ответ 2

Предоставление пути с именем файла, казалось, не сработало для меня, и я не хотел втискивать пучок путей в мой $LOAD_PATH.

Проверяя документацию, я нашел require_relative.

require_relative 'loadee'

Работает как в 1.9.2, так и 2.1.2.

Документация указывает, что require не предназначен для поиска относительных путей вообще, и не является load.