我已经定义了一个方法,里面有很少的类和很少的模块。从其中一个类我试图调用一个模块中定义的方法(在公共内部),我得到一个访问错误。这是完整的层次结构:
module Top
class NestedClass
#some code
NestedModule::method_name
end
module NestedModule
def method_name
#some code
end
end
end
我得到的错误:Top :: NestedModule的未定义方法'method_name':模块
答案 0 :(得分: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
。
答案 1 :(得分: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”在这里也可以使用,但惯例是在调用类/模块方法时使用点,在访问嵌套模块/类时使用双冒号。