gpt4 book ai didi

ruby - 访问单例类

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

将以下代码添加到对象应该允许我检索任何对象的单例类。

class Object
def singleton_class
class << self; self; end
end
end

我有一个 Powerball 类,我用这种方式实例化了它

puts Powerball.new.singleton_class
puts Powerball.new.singleton_class
puts Powerball.singleton_class
puts Powerball.singleton_class

它给了我这个输出

#<Class:#<Powerball:0x007fd333040548>>
#<Class:#<Powerball:0x007fd333040408>>
#<Class:Powerball>
#<Class:Powerball>

因此,powerball 类的两个实例具有唯一的 ID,而直接在该类上调用 singleton_class 不会产生对象 ID。

问题

  1. ID 是否唯一,因为每个实例 都有一个单例类?

  2. 我知道类中的 self 只返回类,即 Class:Powerball,但是既然类是一个对象,它不应该也有一个 ID 吗?有没有办法访问该 ID?

最佳答案

您必须了解单例类属于一个实例。您代码中的前两个单例属于两个不同的 Powerball 实例。 (是的,每个实例都有自己的单例类——它被称为单例,因为只有一个实例属于它。)第三个和第四个单例是相同的——Powerball 类本身的单例类,当然,这两种情况下都是同一个对象。

你为什么不尝试自己调查:

class Kokot; end
puts Kokot.object_id
puts Kokot.singleton_class.object_id

而且,在 Ruby 1.9.x 中,#singleton_class 是一个内置方法。

关于ruby - 访问单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14132883/

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