2017-10-28 8 views
0

어떻게해야합니까 instantiate Foo에서 bar.rb?루비와 Foo를 인스턴스화 하시겠습니까?

[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'이 도움이 될 것입니다.

bar.rb과 같은 디렉토리에 foo.rb이라는 파일을 검색하는 require_relative 'foo'을 사용할 수도 있습니다.

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