Предполагается, что вы имеете в виду вложенные классы в следующем смысле:
class A
class B; end
class C; end
end
Если B
и C
«вложены» в A
, то должно работать следующее:
class Class
def nested_classes
constants.collect { |c| const_get(c) }.
select { |m| m.instance_of?(Class) }
end
end
A.nested_classes => [A::B, A::C]
РЕДАКТИРОВАТЬ: вам может понадобиться использовать константы (false), чтобы предотвратить постоянный поиск модулей дальше по цепочке наследования.