Include is for adding methods to an instance of a class and extend is for adding class methods. Let’s take a look at a small example.
在教科书中,include增加方法为实例方法,extend增加方法为类方法。
我的一点观察如下,不知道对不对。 增加方法到当前作用域的下一级 增加方法到当前作用域的同一级
通过以下例子来证明
下面是一个模块
# file : A.rb
module Test
attr_accessor :name, :age
# def name
# @name
# end
#
# def age
# @age
# end
end
方式一:如下的include方式可以正常工作
# file: main.rb
require './A.rb'
class A
include Test
def initialize(name, age)
@name = name
@age = age
end
end
a = A.new("maxwell", 30)
p a.age
p A.ancesotrs # => [A, Test, Object, Kernel, BasicObject]
方式二:如下的extend方式也可以正常工作
# file: main.rb
require './A.rb'
class A
#include Test
def initialize(name, age)
extend Test
@name = name
@age = age
end
end
a = A.new("maxwell", 30)
p a.age
p A.ancesotrs # => [A, Object, Kernel, BasicObject]
include 不能包含模块中的以self开头的的方法,这样nickname1
这个方法不会出现在任何类中。
module Naming
def self.nickname1
"self.name in Naming"
end
end