2013-12-21 20 views
0

我已經定義了一個方法,它裏面只有很少的類,只有很少的模塊。從其中一個類中,我試圖調用一個在模塊中定義的方法(在公共方法中),並且出現訪問錯誤。以下是完整的層次結構:Ruby中的祖先鏈中存在的方法存在什麼問題

module Top 
class NestedClass 
    #some code 
    NestedModule::method_name 
end 

module NestedModule 
    def method_name 
    #some code 
    end 
end 
end 

和錯誤,我得到:未定義的方法 'METHOD_NAME' 頂級:: NestedModule:模塊

回答

0

把它寫成:

module Top 
    module NestedModule 
    def self.method_name 
     #some code 
    end 
    end 
    class NestedClass 
    #some code 
    NestedModule::method_name 
    end 
end 

在在定義模塊NestedModule之前,您已經做了NestedModule::method_name

+0

如果我在頂層模塊之外定義它,並將其包含在類中(NestedClass),我真的需要它嗎? – user2128702

+0

@ user2128702我沒有得到你 –

+0

我試過你的方式,但我得到完全一樣的NoMethodError。我真的不知道爲什麼。 – user2128702

0

您不能直接調用未聲明的方法以及實例模塊方法。 也許這將清除的東西爲你:

module Top 
    module NestedModule 
    def self.module_method 
     1 
    end 

    def instance_method 
     2 
    end 
    end 

    class NestedClass 
    NestedModule.module_method # => 1 
    NestedModule.instance_method(:instance_method) # => #<UnboundMethod: Top::NestedModule#instance_method> 

    extend NestedModule 
    instance_method # => 2 

    include NestedModule 
    new.instance_method # => 2 
    end 
end 

雖然「NestedModule :: module_method」也將在這裏工作,該公約是調用類/模塊的方法時使用點,並訪問嵌套模塊時,雙冒號/班。

相關問題