如何判断模块中的方法是实例方法还是类方法

时间:2015-03-12 16:08:01

标签: ruby mixins

我理解include创建实例方法,extend创建类方法。我们如何判断方法是实例还是类方法?

在下面的示例中,看起来方法是实例方法和类方法。在某些情况下,实例和类方法之间没有区别吗?

module Test
  def aux
    puts 'aux'
  end
end

class A
  include Test
end

class B
  extend Test
end

a = A.new
a.aux
B.aux

1 个答案:

答案 0 :(得分:2)

includeextend之间的区别在于混合模块的的行为方式。 includeextend都只适用于模块的实例'方法(即不以ModuleName或self开头的方法)

示例:

module Foo
  def a
    puts "a"
  end

  def Foo.b
    puts "b"
  end

  def self.c
    puts "c"
  end
end
包含此模块的类只能访问a作为实例方法,而扩展的类虽然只能访问a作为类方法。两者都无法访问bc,因为这些是Foo的类方法,只能通过调用Foo.bFoo.c来访问