2017-10-28 10 views
0

どうすればinstantiate Fooからbar.rbFooをルビでインスタンス化しますか?

[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ cat foo.rb 
#file: foo.rb 
class Foo 
    def initialize 
    puts "foo" 
    end 
end 
[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ cat bar.rb 
#file: bar.rb 
require 'foo' 

Foo.new 
[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ 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>' 
[email protected]:~/ruby/hello$ 

現時点ではモジュールを使用していません。

[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ ruby bar.rb 
foo 
[email protected]:~/ruby/hello$ 
[email protected]:~/ruby/hello$ cat bar.rb 
class Foo 
    def initialize 
    puts "foo" 
    end 
end 


Foo.new 




[email protected]:~/ruby/hello$ 

答えて

2

スタックトレースは、それがファイルfoo.rbを見つけることができませんのでごrequire 'foo'が動作していないことを語っている:Fooはインラインときに正常に動作します。

これは、requireが引数を絶対パスとして解釈するか、指定したファイルのルビロードパスを検索するためです。

この問題を解決するには、ファイルへの絶対パスを指定します。この場合:require '/home/thufir/hello/foo'があなたのために働きます。

require_relative 'foo'を使用して、bar.rbと同じディレクトリにあるファイルfoo.rbを検索することもできます。

https://ruby-doc.org/core-2.4.2/Kernel.html#method-i-require

関連する問題