Câu hỏi này tương tự/liên quan đến câu hỏi tràn ngăn xếp khác về Looking up all the descendants of a class in Ruby. Một câu hỏi tuyệt vời đầy đủ các thông tin mà tôi đang tìm kiếm - trừ khi tôi thả xuống thành một đường ray console:ActiveSupport :: DescendantsTracker.descendants không trả về hậu duệ
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, ...]
Vì vậy, tại sao không ActiveSupport :: DescendantsTracker trả lại hậu duệ của đối tượng? Sự khác biệt trong việc thực hiện là gì? Số điện thoại documentation for DescendantsTracker gợi ý rằng:
Mô-đun này cung cấp triển khai nội bộ để theo dõi hậu duệ nhanh hơn lặp qua ObjectSpace.
Nhanh hơn? Ok, nó phải nhanh hơn để trả lại không có gì so với cái gì đó (phải không?), Nhưng nó phải trả về hậu duệ của lớp được cung cấp.
Tôi đã đọc các bài liên quan và tôi vẫn không nhận được nó . Làm cách nào để kiểm tra chức năng này? Tôi đã thử thiết lập 'config.cache_classes = true' trong config \ development.rb thành không có hiệu lực ... – erroric
Bạn đã thử khởi tạo trong câu trả lời không được chấp nhận? 'Dir [Rails.root + 'ứng dụng/mô hình/*. Rb']. Bản đồ {| f | File.basename (f, '. *'). Camelize.constantize} ' – Matt
Tại sao tôi cần tải các mô hình của ứng dụng để xem con cháu của Object? Không nên ray đã biết về họ? Nếu tôi tham khảo tên lớp trong giao diện điều khiển, không đường ray không sau đó tải đối tượng đó? – erroric