在 Ruby 2.3.1 中列出子类
listing subclasses in 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,但还是想知道后面是什么。
谢谢!
这是 class FairPlay::TLLV::ProtocolVersionsSupported
对象的 eigenclass。相关对象的 ID 为 0x00000003566730 / 2
.
您是否试图在此类实例上定义一个方法/您是否在模拟一个方法?如果你不知道或者甚至不知道这个 class/object 是关于什么的,我建议你在运行时跟踪它。
这很可能与 rspec 有关,但可能涉及很多方面。 Ruby版本不对
我有以下方法来收集子类列表。由于各种原因,我无法使用 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,但还是想知道后面是什么。
谢谢!
这是 class FairPlay::TLLV::ProtocolVersionsSupported
对象的 eigenclass。相关对象的 ID 为 0x00000003566730 / 2
.
您是否试图在此类实例上定义一个方法/您是否在模拟一个方法?如果你不知道或者甚至不知道这个 class/object 是关于什么的,我建议你在运行时跟踪它。
这很可能与 rspec 有关,但可能涉及很多方面。 Ruby版本不对