Ruby类实例方法def初始化:实例或类方法?

我们来看一个普通的ruby课:

class Person
  attr_accessor :name
  def initialize name
    @name = name
  end
end

bob = Person.new("bob")

我的问题是初始化的本质.这是事情,new显然是一个方法,但在我看来,initialize是一个实例方法(不是类),在调用方法new时创建的实例上调用.

我有这个权利吗?或者有人会有新的亮点吗?我做了一些谷歌搜索,找不到任何清晰度.

解决方法

一个新对象被初始化时(也就是说,当你在类上调用new)时,这个方法实际上被调用了什么:

class Class
  def new(*args,&block)
    obj = allocate
    obj.send(:initialize,*args,&block)
    obj
  end
end

在标准的Ruby实现中,此方法在C中实现,但是为well documented.

要了解这里发生了什么,你必须要知道在Ruby中,甚至类都是Objects(它们是实例或Class类).因此,在Person类上调用new时,实际上是在Class对象的实例上调用new方法.

如您所见,Person类(作为Class本身的一个实例)带来了一个为名为bob的新实例分配内存的方法.分配内存后,新方法将在新创建的实例上调用initialize.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...