假设以下代码:
class A
end
a = A.new
As = class << a
self
end
# or:
# As = a.singleton_class
有没有办法从a
获取As
?
答案 0 :(得分:3)
这是给你的一招:
class A
end
a = A.new
As = a.singleton_class
a2 = ObjectSpace.each_object.select{|obj| obj.singleton_class == As}.first
a2 == a # => true
答案 1 :(得分:1)
我认为这很简单:
ObjectSpace.each_object(As).first
# => #<A:0x000000029a7c50>
答案 2 :(得分:0)
这只是我自己对YMMV的猜测,但我认为“a”需要被定义为一个类变量(即“@@ a = A.new”)然后你会有适当的访问方法返回类实例。
话虽如此,您是否考虑过使用Singleton模块(假设您使用的是1.9.3)?
答案 3 :(得分:0)