这个问题与关于Looking up all the descendants of a class in Ruby的另一个堆栈溢出问题相似/相关。一个充满我正在寻找的信息的奇妙问题-除了当我进入Rails控制台时:

irb(main):001:0> ActiveSupport::DescendantsTracker.descendants(Object)
=>[]
irb(main):002:0> ObjectSpace.each_object(Class).select { |klass| klass < Object }
=> [IRB::Notifier::AbstractNotifier, IRB::Notifier::ErrUnrecognizedLevel, ...]

那么,为什么ActiveSupport::DescendantsTracker不返回Object的后代?实现上有什么区别? documentation for DescendantsTracker建议:



快点?好的,什么都没有返回比什么更快(对吗?),但是它应该返回所提供类的后代。

最佳答案

ActiveSupport::DescendantsTracker.descendants(Object)在您的控制台中将返回空白,因为开发控制台尚未编译您的应用程序,它尚未加载所有类,因此不知道如何输出它们!

看一下这个问题:RoR: MyModel.descendants returns [] in a view after the first call?

关于ruby-on-rails - ActiveSupport::DescendantsTracker.descendants不返回后代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16737619/

10-12 05:15