2

我有以下方法来收集子类列表。由于各种原因,我无法使用 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,但仍然想知道背后是什么。

谢谢!

4

1 回答 1

0

这是class对象的特征类FairPlay::TLLV::ProtocolVersionsSupported。有问题的对象的 id 为0x00000003566730 / 2

您是否尝试在此类实例上定义一种方法/您是否在嘲笑一个?如果你不知道或者甚至不知道这个类/对象是关于什么的,我建议你在运行时跟踪它。

它很可能与 rspec 有关,但可能涉及很多方面。不是Ruby版本的。

于 2016-10-07T13:47:45.523 回答