对不起,我不知道如何解释这个解释.下面两段代码之间有什么区别(如果有的话)?
class Foo
def initalize
end
end
class Foo
def self.new
allocate
end
end
Run Code Online (Sandbox Code Playgroud)
此外,下面初始化类的两种方法之间的区别是什么:
Foo.new
Foo.allocate
Run Code Online (Sandbox Code Playgroud)
allocate 为实例分配内存Foo但不初始化它.
initialize在已分配的对象上调用以初始化(设置其初始值)的实例Foo.
new调用这两个的默认实现:
class Foo
def self.new(*args, &blk)
obj = allocate
obj.initialize(*args, &blk)
obj
end
end
Run Code Online (Sandbox Code Playgroud)
注意:默认实现new通常是本机编写的(例如,在C中,用于MRI),而不是在Ruby中.上面的代码片段是Ruby,它与本机实现具有相同的效果.
所以你看,两者并不完全相同,尽管它们都用于构造新的实例Foo.
如果你的initialize方法一开始是空的,并且它没有参数,那么是的,你可以用你Foo.new本质上是别名的替换你的定义Foo.allocate,但在所有其他情况下,只有通过调用Foo.new才能得到一个正确的初始化版本你的对象.
(我建议坚持只调用new你的类,即使它们不需要初始化,因为它抽象了内存的分配).
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |