加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,即使它们不需要初始化,因为它抽象了内存的分配).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读