How do I instantiate Foo from bar.rb
?
# foo.rb
class Foo
def initialize
puts "foo"
end
end
# bar.rb
require 'foo'
Foo.new
$ ruby bar.rb
/home/thufir/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- foo (LoadError)
from /home/thufir/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from bar.rb:2:in `<main>'
Not using modules at the moment. Works fine when Foo
is declared inside the same script:
# bar.rb with Foo declared inside
class Foo
def initialize
puts "foo"
end
end
Foo.new
$ ruby bar.rb
foo
The stack trace is telling you that your require 'foo'
is not working because it can't find the file foo.rb
.
That is because require
interprets the argument you give it as an absolute path, or it searches your ruby load path for the specified file.
You could resolve this by providing an absolute path to the file. In this case: require '/home/thufir/hello/foo'
will work for you.
You could also use require_relative 'foo'
, which will search for a file foo.rb
in the same directory as your bar.rb
.
https://ruby-doc.org/core-2.4.2/Kernel.html#method-i-require