2013-01-10 1 views
1

각 고유 클래스는 인스턴스가 하나뿐이기 때문에 고유 클래스의 인스턴스를 얻는 방법을 찾고 있습니다.Ruby - 고유 클래스의 인스턴스를 가져 오는 방법이 있습니까?

ObjectSpace를 통해 각 고유 클래스를 테스트 할 수는 있지만 값이 비싸다고 생각합니다. 나는의 인스턴스 (들)을 얻을 수있는 Class#instance 또는 Class#instances 방법이 있었으면 좋겠어

class A; end 
class B < A; end 

AA = class << A; self; end 

p A.is_a? AA #=> true 
p B.is_a? AA #=> true!!!! 

을 : is_a?이 충분하지 않기 때문에

호기심, 나는 경기를 테스트하기 위해 각 개체의 eigenclass을 받아야합니다 클래스 (또는 고유 클래스).

p AA   #=> #<Class:A> 
instance = Object.const_get(AA.inspect.match(/^#<Class:(\w+)>$/)[1]) 
p instance #=> A 

# (this works for class' eigenclass) 

내 사용 사례가 나는의 클래스를 취득 할 필요가있는 것입니다 :

가장 직접적인 방법은 내가 의지 할 수있는 경우 eigenclass 'inspect,하지만 내가 궁금하네요에서 인스턴스를 추출하는 것 클래스 메소드,하지만 Method#owner이 날은 eigenclass 제공하고, Method#receiver 나에게 현재 수신기 제공합니다

# Continuing previous example 
def A.f; end 
mtd = B.method(:f) 
p mtd.owner  #=> #<Class:A> 
p mtd.receiver #=> B 
# I want to obtain A 

어떤 아이디어? 당신이 어떤 주어진 클래스의 인스턴스를 찾으려면

답변

5

, 당신은 ObjectSpace 사용할 수 있습니다

class A; end 
class B < A; end 

ObjectSpace.each_object(A.singleton_class).to_a 
# => [B, A] 
+0

방법'singletonclass'은 무엇입니까? – sawa

+0

@sawa, ['Object # singleton_class' 메소드 문서] (http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-singleton_class)를 참조하십시오. –

+0

좋습니다. 나는 그러한 방법이 존재한다는 것을 몰랐다. 이제 사용할 수 있습니다. – sawa

관련 문제