Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
initialize方法是Ruby中的内置方法吗?_Ruby_Methods - Fatal编程技术网

initialize方法是Ruby中的内置方法吗?

initialize方法是Ruby中的内置方法吗?,ruby,methods,Ruby,Methods,initialize方法是Ruby中的内置方法吗 为什么我们在创建一个新对象时必须传递参数,为什么它直接转到那个initialize方法?我们可以创建一个没有初始化方法的类吗?你可以考虑类新< 方法和每个类的初始化> 方法之间的关系,或多或少类似于: class Class def new instance = allocate() instance.initialize return instance end end class Foo def ini

initialize方法是Ruby中的内置方法吗


为什么我们在创建一个新对象时必须传递参数,为什么它直接转到那个initialize方法?我们可以创建一个没有初始化方法的类吗?

你可以考虑<代码>类新< <代码>方法和每个类的<代码>初始化> <代码>方法之间的关系,或多或少类似于:

class Class
  def new
    instance = allocate()

    instance.initialize

    return instance
  end
end

class Foo
  def initialize
    # Do nothing
  end
end
您可以创建一个类,而无需显式定义
#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

创建新对象背后的逻辑由两个元素组成。首先,您需要在内存中创建一个新对象。这是通过在给定的类上调用
allocate
方法来实现的(它是在一个类上定义的)——它不需要任何参数,它唯一的职责是从ruby内存堆slab中获取一个空闲插槽,在该位置放置一个新对象并返回该对象。第二步是对这个新创建的对象调用
initialize
方法-这就是为什么
initialize
是一个实例方法而不是类方法

默认的
initialize
方法是语言的一部分,它实际上不做任何事情,也不接受任何参数


new
方法只是一个方便的速记,它首先调用
allocate
方法,然后调用
initialize
方法(使用所有传递的参数)对
allocate
方法返回的对象进行初始化

初始化
:您所说的内置是什么意思?它是一个[constructor[():用于创建类的实例。不必将参数传递给
initialize
。我们可以不使用initialize方法创建类吗:是