нагрузка работает по локальному пути, не требует - PullRequest
22 голосов
/ 14 мая 2011

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 версия 1.9.2

Ответы [ 2 ]

39 голосов
/ 14 мая 2011

Если вы предоставите только имя файла для 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.'
5 голосов
/ 19 июня 2014

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

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

require_relative 'loadee'

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

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

...