在Ruby 2.3.1中列出子类

时间:2016-10-07 13:25:52

标签: ruby rspec ruby-2.3.1

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

谢谢!

1 个答案:

答案 0 :(得分:0)

这是类FairPlay::TLLV::ProtocolVersionsSupported的对象的eigenclass。相关对象的ID为0x00000003566730 / 2

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

它很可能与rspec有关,但它可能是很多东西。 Ruby版本不是它。