我理解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
答案 0 :(得分:2)
include
和extend
之间的区别在于混合模块的类的行为方式。 include
和extend
都只适用于模块的实例'方法(即不以ModuleName或self
开头的方法)
示例:
module Foo
def a
puts "a"
end
def Foo.b
puts "b"
end
def self.c
puts "c"
end
end
包含此模块的类只能访问a
作为实例方法,而扩展的类虽然只能访问a
作为类方法。两者都无法访问b
或c
,因为这些是Foo的类方法,只能通过调用Foo.b
或Foo.c
来访问