ruby – initialize和self.new之间的区别
发布时间:2020-12-17 03:07:02 所属栏目:百科 来源:网络整理
导读:对不起,我不知道如何解释这个解释.下面两段代码之间有什么区别(如果有的话)? class Foo def initalize endendclass Foo def self.new allocate endend 此外,下面初始化类的两种方法之间的区别是什么: Foo.newFoo.allocate 解决方法 allocate为Foo实例分配
对不起,我不知道如何解释这个解释.下面两段代码之间有什么区别(如果有的话)?
class Foo def initalize end end class Foo def self.new allocate end end 此外,下面初始化类的两种方法之间的区别是什么: Foo.new Foo.allocate 解决方法
allocate为Foo实例分配内存但不初始化它.
在已分配的对象上调用initialize以初始化(设置Foo实例的初始值). 新调用的默认实现都是: class Foo def self.new(*args,&blk) obj = allocate obj.initialize(*args,&blk) obj end end 注意:new的默认实现通常是本机编写的(例如在C中,用于MRI),而不是在Ruby中编写.上面的代码片段是Ruby,它与本机实现具有相同的效果. 所以你看,两者并不完全相同,尽管它们都用于构建一个新的Foo实例. 如果你的initialize方法开头是空的,并且它没有参数,那么是的,你可以用Foo.allocate替换你的Foo.new定义,但在所有其他情况下,只能通过调用Foo .new可以获得对象的正确初始化版本. (我建议坚持只在类上调用new,即使它们不需要初始化,因为它抽象了内存的分配). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |