3

次のコードを想定します。

class A
end

a = A.new

As = class << a
    self
end

# or:
# As = a.singleton_class

aから得る方法はありAsますか?

4

4 に答える 4

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
于 2012-11-25T15:32:27.733 に答える
1

私はそれが簡単だと思います:

ObjectSpace.each_object(As).first
# => #<A:0x000000029a7c50>
于 2012-11-25T15:47:30.000 に答える
0

これは私の側の知識に基づいた推測なので、YMMVですが、「a」はクラス変数として定義する必要があると思います(つまり、「@@ a = A.new」)。そうすれば、適切なアクセサメソッドを使用してクラスインスタンス。

ただし、シングルトンモジュールの使用を検討しましたか(1.9.3を使用していると仮定)。

于 2012-11-25T15:34:17.393 に答える
0

sawaによる解決策は、クラスの固有クラスでは機能しません。返される文字列を解析することにより、メソッドを介してユニバーサルメソッドを取得できます。atalon.czを参照Object#to_sしてください。ただし、Rubyでは定数を再割り当て/削除できるため、このソリューションは100%信頼できるわけではありません。Module#to_s

于 2012-12-05T20:55:28.047 に答える