2013-09-22 86 views
-1

有兩個ruby文件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

我不清楚..我得到輸出爲*從rubyA foo1「* .. –

+1

@ArupRakshit OP可能預計它從''foo1 ruby​​B''。 – 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

你剛剛超越了它!你不能在同一個「範圍」中有兩個同名的方法。

您可能想要使用類或模塊來確定方法的範圍。

而且,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,它是第一次點擊時,我GOOGLE了'紅寶石模塊作爲命名空間'

相關問題