次のコードを想定します。
class A
end
a = A.new
As = class << a
self
end
# or:
# As = a.singleton_class
a
から得る方法はありAs
ますか?
次のコードを想定します。
class A
end
a = A.new
As = class << a
self
end
# or:
# As = a.singleton_class
a
から得る方法はありAs
ますか?
ここにあなたのためのトリックがあります:
class A
end
a = A.new
As = a.singleton_class
a2 = ObjectSpace.each_object.select{|obj| obj.singleton_class == As}.first
a2 == a # => true
私はそれが簡単だと思います:
ObjectSpace.each_object(As).first
# => #<A:0x000000029a7c50>
これは私の側の知識に基づいた推測なので、YMMVですが、「a」はクラス変数として定義する必要があると思います(つまり、「@@ a = A.new」)。そうすれば、適切なアクセサメソッドを使用してクラスインスタンス。
ただし、シングルトンモジュールの使用を検討しましたか(1.9.3を使用していると仮定)。