2016-10-07 2 views
2

다음과 같은 방법으로 하위 클래스 목록을 수집 할 수 있습니다. 여러 가지 이유로 ActiveSupport DescendantsTracker을 사용할 수 없습니다. (하지만 관련되지 않을 수 있습니다) 2.3.1 루비하는 업그레이드와Ruby 2.3.1의 하위 클래스 나열

def self.descendants 
    unless @subclasses 
    @subclasses = [] 
    ObjectSpace.each_object(Class) do |subclass| 
     if subclass < self # && other conditions 
     @subclasses << subclass.to_s.split('::').last 
     end 
    end 
    end 
    @subclasses 
end 

이 목록은 간헐적으로이

"#<Class:#<FairPlay::TLLV::ProtocolVersionsSupported:0x00000003566730>>"

첫 번째 질문처럼, 전에 보지 값이 아닌 포함하기 시작 것 이것이 무엇을 나타내는가? 나는 포인터가 시작하는 것에 대해 감사 할 것입니다.

간헐성 - 이것은 테스트 (RSpec)와 테스트 케이스가 별도로 실행되지 않는 경우에만 나타납니다. 그래서 나는 RSpec을 의심하지만 여전히 뒤에 무엇이 있는지 알고 싶다.

감사합니다.

답변

0

이것은 FairPlay::TLLV::ProtocolVersionsSupported의 개체 인 eigenclass입니다. 해당 객체의 ID는 0x00000003566730/2입니다.

그런 인스턴스에서 메소드를 정의하려고합니까?/조롱하고 있습니까? 이 클래스/객체가 무엇인지 모르거나 모르는 경우 런타임에 추적하는 것이 좋습니다.

아마도 rspec과 관련이 있지만, 많은 일이있을 수 있습니다. 루비 버전은 그렇지 않습니다.

관련 문제