Ruby initialize和self.new之间的区别
对不起,我不知道该怎么解释。下面两段代码之间有什么区别(如果有)Ruby initialize和self.new之间的区别,ruby,Ruby,对不起,我不知道该怎么解释。下面两段代码之间有什么区别(如果有) class Foo def initalize end end class Foo def self.new allocate end end 此外,下面两种初始化类的方法有什么区别: Foo.new Foo.allocate allocate为Foo的实例分配内存,但不会初始化它 对已分配的对象调用initialize,以初始化Foo的实例(设置其初始值) new的默认实现调用这两个函数: clas
class Foo
def initalize
end
end
class Foo
def self.new
allocate
end
end
此外,下面两种初始化类的方法有什么区别:
Foo.new
Foo.allocate
allocate
为Foo
的实例分配内存,但不会初始化它
对已分配的对象调用initialize
,以初始化Foo
的实例(设置其初始值)
new
的默认实现调用这两个函数:
class Foo
def self.new(*args, &blk)
obj = allocate
obj.initialize(*args, &blk)
obj
end
end
注意:new
的默认实现通常是本机编写的(例如,对于MRI,用C编写),而不是用Ruby编写。上面的代码片段是与本机实现具有相同效果的Ruby
因此,您可以看到,这两者并不完全相同,尽管它们都用于构建Foo
的新实例
如果您的initialize
方法一开始是空的,并且不带任何参数,那么是的,您可以将Foo.new
的定义替换为本质上是Foo.allocate
的别名,但在所有其他情况下,只有通过调用Foo.new
才能获得对象的正确初始化版本
(我建议坚持只调用类上的
new
,即使它们不需要初始化,因为它会抽象掉内存分配)。相关问题:new
如果通过一个块,也会传递它的块。这很有意义。我过去认为初始化和分配是一样的,因为返回值是相似的。