0

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 
0

1 Answer 1

3

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

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.