当你在Ruby中实例化一个类时会发生什么

237 阅读1分钟

基本上,当你在Ruby中实例化一个类时,会发生三件事:

  1. 为将要创建的类的新对象分配空间。
  2. 调用一个初始化器来设置初始化变量,比如说。
  3. 创建的类对象的一个实例被返回。

一个很好的方法是通过一个例子来证明这一点。假设我们有一个想要实例化的类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的文档是这样写的:

为一个新的类的对象分配空间,并且不在新的实例上调用初始化。返回的对象必须是类的一个实例。

这似乎是实例化过程中最重要的一步。