I am confused about the difference between load 'file.rb'
and require 'Module'
. At Learn Ruby the Hard Way, the example of how to use a module is set up with two files (mystuff.rb
and apple.rb
):
mystuff.rb
module MyStuff
def MyStuff.apple()
puts "I AM APPLES!"
end
end
apple.rb
require 'mystuff'
MyStuff.apple()
However, when I run apple.rb
, either in the Sublime Text console, or with ruby apple.rb
, I get a Load Error
. I have also tried require 'MyStuff'
, and require 'mystuff.rb'
, but I still get the Load Error
.
So, I switched the first line of apple.rb
to load 'mystuff.rb'
, which allows it to run. However, if I edit 'mystuff.rb'
to be a definition of class MyStuff
as opposed to a module MyStuff
, there is no difference.
For reference, the Load Error
is:
/Users/David/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in
require': cannot load such file -- mystuff (LoadError)`
I've peeked into kernel_require.rb
and looked at the require
definition, but since I'm a Ruby Nuby (indeed, a programming newbie), it was a little overwhelming. Since Learn Ruby the Hard Way hasn't been updated since 2012-10-05, there've probably been some syntax changes for modules. Yes?
You can solve this easily by changing
require 'mystuff'
to
require_relative './mystuff'