为什么Module.method_defined?(:方法)没有正常工作?

我正在尝试检查是否在使用Module.method_defined?(:method)的模块中定义了一个Module.method_defined?(:method)并且它返回false,它应该返回true。

 module Something def self.another 1 end end 

Something.methods列出了’another’但Something.method_defined?(:another)返回false

这可能不起作用,因为该方法是在自我定义的吗? 如果是这种情况,还有另一种方法可以检查方法是否在模块上定义,而不是使用method_defined?

要知道模块是否有模块方法,您可以使用respond_to? 在模块上:

 Something.respond_to?(another) => true 

method_defined? 将告诉您包含模块的类的INSTANCES是否响应给定的方法。

模块方法在其元类中定义。 因此,您还可以检查方法包含:

 k = class << Something; self; end # Retrieves the metaclass k.method_defined?(:another) #=> true 

您可以在了解Ruby Metaclasses中阅读更多相关信息。