我有以下方法来收集子类列表。由于各种原因,我无法使用 ActiveSupport DescendantsTracker
。
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
随着升级到 ruby 2.3.1(虽然可能不相关),列表开始间歇性地包含以前没有见过的值,像这样
"#<Class:#<FairPlay::TLLV::ProtocolVersionsSupported:0x00000003566730>>"
第一个问题是这意味着什么?我会感谢指针开始。
关于间歇性——这只出现在测试(RSpec)中,并且只有在测试用例没有单独运行的情况下才会出现。所以我怀疑 RSpec,但仍然想知道背后是什么。
谢谢!