2009-10-19 52 views

Trả lời

22

Bạn có yêu cầu để xem tất cả các tổ tiên của một lớp học, hoặc các hậu duệ? Đối với tổ tiên, sử dụng:

Class.ancestors 

Không có phương pháp so sánh "out of the box" cho con cháu, tuy nhiên. Bạn có thể sử dụng ObjectSpace, như dưới đây, nhưng đó là chậm và có thể không được cầm tay trên triển khai Ruby:

ObjectSpace.each_object(Class) do |klass| 
    p klass if klass < StandardError 
end 

EDIT:

Người ta cũng có thể sử dụng móc Class#inherited để theo dõi subclassing. Điều này sẽ không bắt được bất kỳ lớp con nào được tạo trước khi chức năng theo dõi được xác định, tuy nhiên, nó có thể không phù hợp với trường hợp sử dụng của bạn. Nếu bạn cần sử dụng thông tin đó theo lập trình trên các lớp được xác định bên trong ứng dụng của bạn, tuy nhiên, đây có thể là cách để đi.

+0

Cảm ơn rất nhiều! Đó là chính xác những gì tôi muốn! :) – flyer88

6

Module#ancestors

Ví dụ:

class Foo 
end 

class Bar < Foo 
end 

Bar.ancestors # => [Bar, Foo, Object, Kernel] 
+0

Cảm ơn rất nhiều Avdi! – flyer88

Các vấn đề liên quan