0

我已经定义了一个方法,里面有几个类和几个模块。从其中一个类中,我尝试调用在模块中定义的方法(在公共模块中),但出现访问错误。这是完整的层次结构:

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

 module NestedModule
   def method_name
     #some code
   end
 end
end

我得到的错误是:Top::NestedModule:Module 的未定义方法'method_name'

4

2 回答 2

0

写成:

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

在您的情况下,您NestedModule::method_name在定义模块之前做了NestedModule

于 2013-12-21T21:01:34.093 回答
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”在这里也可以使用,但惯例是在调用类/模块方法时使用点,在访问嵌套模块/类时使用双冒号。

于 2013-12-21T21:42:56.187 回答