初始化方法是Ruby中的内置方法吗?

Abd*_*u23 4 ruby methods

初始化方法是Ruby中的内置方法吗?

为什么在创建新对象时必须传递参数,为什么将其直接传递给该initialize方法?而且,我们可以创建没有初始化方法的类吗?

use*_*951 5

您可以考虑像这样大致实现该Class#new方法与每个类的#initialize方法之间的关系:

class Class
  def new
    instance = allocate()

    instance.initialize

    return instance
  end
end

class Foo
  def initialize
    # Do nothing
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以在不显式定义#initialize方法的情况下创建类,因为#initialize默认情况下该方法被定义为不执行任何操作,并且其返回值始终被忽略(无论您返回什么值)。

您传递给的参数Class#new总是直接以#initialize相同的顺序和格式传递给它们。例如:

class Class
  def new (arg1, arg2, &block_arg)
    instance = allocate()

    instance.initialize(arg1, arg2, &block_arg)

    return instance
  end
end

class MyClass
  def initialize (arg1, arg2, &block_arg)
    # Do something with args
  end
end
Run Code Online (Sandbox Code Playgroud)