2016-10-07 2 views
2

Ich habe die folgende Methode, um eine Liste von Unterklassen zu sammeln. Aus verschiedenen Gründen kann ich ActiveSupport DescendantsTracker nicht verwenden.Listing Unterklassen in 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 

Mit Upgrade auf Rubin 2.3.1 (die zwar vielleicht nicht verwandt), begann die Liste mit Unterbrechungen auch Werte enthalten, bevor nicht gesehen, wie diese

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

Der erste Frage würde Was bedeutet das? Ich wäre dankbar, wenn der Zeiger anfangen würde.

Re die Intermittenz - das kommt nur in den Tests (RSpec) und nur dann, wenn der Testfall nicht getrennt ausgeführt wird. Also ich vermute RSpec, möchte aber immer noch wissen, was dahinter steckt.

Danke!

Antwort

0

Dies ist die eigenclass eines Objekts der Klasse FairPlay::TLLV::ProtocolVersionsSupported. Das Objekt hat eine ID von 0x00000003566730/2.

Versuchen Sie eine Methode für eine solche Instanz zu definieren/verspotten Sie eine? Wenn Sie nicht wissen oder nicht wissen, worum es bei dieser Klasse/diesem Objekt geht, sollten Sie es zur Laufzeit verfolgen.

Es hat wahrscheinlich mit rspec zu tun, aber es könnte eine Menge Dinge sein. Ruby-Version ist es nicht.