代码之家  ›  专栏  ›  技术社区  ›  John Duff

为什么module.method没有定义?(:方法)正确工作?

  •  9
  • John Duff  · 技术社区  · 16 年前

    我试图检查模块中是否使用 Module.method_defined?(:method) 它返回错误,它应该返回正确。

    module Something
      def self.another
        1
      end
    end
    

    Something.methods 已列出“另一个”,但 Something.method_defined?(:another) 收益率 false .

    这是否可能不起作用,因为该方法是在self上定义的?如果是这种情况,有没有其他方法可以检查该方法是否是在模块上定义的,而不是使用 method_defined? ?

    2 回复  |  直到 10 年前
        1
  •  11
  •   ennuikiller    16 年前

    要知道模块是否有模块方法,可以使用Response-to? 上 模块:

    Something.respond_to?(another)
    => true
    

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

        2
  •  5
  •   tmaier    10 年前

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

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

    你可以在 Understanding Ruby Metaclasses .

    推荐文章