基本上,当你在Ruby中实例化一个类时,会发生三件事:
- 为将要创建的类的新对象分配空间。
- 调用一个初始化器来设置初始化变量,比如说。
- 创建的类对象的一个实例被返回。
一个很好的方法是通过一个例子来证明这一点。假设我们有一个想要实例化的类Country ,但是我们不走寻常路,不做类似于Country.new 的事情,而是实现我们自己的new ,来模仿new 的功能。我们将把我们的版本称为new fresh 。
我们的实现将看起来像这样:
class Country
def self.fresh(name, capital)
instance = allocate # 1. Allocate space for a new object
instance.custom_initializer(name, capital) # 2. Call initializer
instance # 3. Return instance of Country
end
def custom_initializer(name, capital)
@name = name
@capital = capital
end
end
p Country.fresh("Ghana", "Accra")
# => #<Country:0x000000010c5e23f8 @name="Ghana", @capital="Accra">
allocate的文档是这样写的:
为一个新的类的对象分配空间,并且不在新的实例上调用初始化。返回的对象必须是类的一个实例。
这似乎是实例化过程中最重要的一步。