initialize方法是Ruby中的内置方法吗?
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方法?我们可以创建一个没有初始化方法的类吗?你可以考虑<代码>类新< <代码>方法和每个类的<代码>初始化> <代码>方法之间的关系,或多或少类似于:
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方法创建类吗:是