2013-09-22 2 views
-1

두 개의 루비 파일 rubyA와 rubyB가 있습니다. rubyB 단지 2 방법 다른 파일의 메소드 사용

#rubyB.rb 
def foo1() 
    p "foo1 from rubyB" 
end 
def foo2() 
    foo1() 
end 

포함하고 rubyA는

#rubyA.rb 
require_relative 'rubyB.rb' 
def foo1() 
    p "foo1 from rubyA" 
end 
foo2() 

출력이 "rubyA에서 foo1은"포함 할 것이다. 어떻게 foo2가 그의 파일에서 foo1을 호출 할 수 있습니까?

+0

경고가 발생 했습니까? 'ruby -w'로 다시 시도하십시오. – bsd

+0

나는 분명하지 않습니다. foo1 from rubyA "* .. –

+1

@ArupRakshit OP는 아마도"rubyB "에서 foo1이 될 것으로 예상했을 것입니다. – bsd

답변

1
#rubyB.rb 
class B 
    def self.foo1 
    p "foo from B" 
    end 
    def self.foo2 
    foo1 
    end 
end 

#rubyA.rb 
class A 
    def self.foo1 
    p "foo from A" 
    end 
    def self.foo2 
    foo1 
    end 
end 

#mycode.rb 
require_relative 'rubyA' 
require_relative 'rubyB' 

B.foo2 
2

방금 ​​무시했습니다. 당신은 같은 "범위"에서 같은 이름을 가진 2 개의 메소드를 가질 수 없습니다.

클래스 또는 모듈을 사용하여 메서드 범위를 지정할 수 있습니다.

또한 require_relative의 동작은 필요한 파일의 모든 코드를 필요한 위치에 두는 것과 거의 같습니다. 그래서 기본적으로이 파일을 가지고있는 것과 같습니다.

# require_relative 'rubyB.rb' 

def foo1 
    p "foo1 from rubyB" 
end 
def foo2 
    foo1 
end 

def foo1 
    p "foo1 from rubyA" 
end 
foo2 
1

두 파일은 글로벌 네임 스페이스에 노력하고 있습니다. 모듈을 사용하여 두 파일을 모두 수정하여 네임 스페이스를 지정할 수 있습니다.

# rubyB.rb 
module RubyB 
    def self.foo1 
    p "foo1 from rubyB" 
    end 
    def self.foo2 
    foo1 
    end 
end 

# rubyA.rb 
require_relative 'rubyB' 
module RubyA 
    def self.foo1 
    p "foo1 from rubyA" 
    end 
end 
RubyB.foo2 

자아. 메소드가 그것을 모듈 메소드로 정의하기 전에 모듈 네임 스페이스 내에서 호출 될 수 있습니다. 우리가 RubyB.foo2으로, 마지막 줄에 않는 한 (. RubyB.foo2가 호출 될 때, 컨트롤은 자동으로, 이미있는 RubyB 네임 스페이스가 포함 된 RubyB 모듈. foo1에 따라서 호출로 점프 RubyB.foo1를 호출합니다. 더

읽기 here, 내가봤을 때 첫 번째 안타 중 하나는 '루비 모듈을 네임 스페이스로'

관련 문제