load works on local path, require doesn't

为君一笑 提交于 2019-12-04 10:00:37

问题


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.'

When I run "ruby loaddemo.rb", This works fine. Both files are in the same directory, and that's the directory I run from.

But if I change the load to a require, and with or without the extension I get:

<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>'

My question is of course, why isn't require working in this case? It should, right? Do load and require use different paths?

Ruby version 1.9.2


回答1:


If you provide just a filename to require, it will only look in the predefined $LOAD_PATH directories. However, if you provide a path with your filename, it should work:

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

You could also add your project's folder to the load path instead:

$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.'

And last, you could just use require_relative instead:

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



回答2:


Providing a path with the filename seemed not to work for me, and I didn't want to cram a bunch of paths into my $LOAD_PATH.

Checking out the documentation, I found require_relative.

require_relative 'loadee'

Works in both 1.9.2 and 2.1.2.

The documentation indicates that require is not intended to search relative paths at all, and neither is load.



来源:https://stackoverflow.com/questions/5998917/load-works-on-local-path-require-doesnt

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!