Ruby类实例方法def初始化:实例或类方法?
发布时间:2020-12-17 03:18:52 所属栏目:百科 来源:网络整理
导读:我们来看一个普通的ruby课: class Person attr_accessor :name def initialize name @name = name endendbob = Person.new("bob") 我的问题是初始化的本质.这是事情,new显然是一个类方法,但在我看来,initialize是一个实例方法(不是类),在调用类方法new时创
我们来看一个普通的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |