gpt4 book ai didi

Ruby 类实例方法 def 初始化 : instance or class method?

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:01 25 4
gpt4 key购买 nike

让我们来看一个普通的 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 中,甚至类也是对象(它们是实例或 Class 类)。因此,当调用 new在你的 Person类,你实际上是在调用 new Class 实例上的方法对象。

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

关于Ruby 类实例方法 def 初始化 : instance or class method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com