Es gibt keinen "Standardweg", da dies keine Standardaufgabe ist. Für alles andere als Visualisierung ist es eine rote OO-Flagge, Ihren Erbbaum zu untersuchen.
Zusätzlich zur Klasse :: ISA gibt es mro::get_linear_isa(). Beide waren eine Zeit lang im Kern, so dass sie für eine Definition als "Standard" angesehen werden konnten. Beide zeigen Vererbung als flache Liste, nicht als Baum, was vor allem für tiefe Magie nützlich ist.
Die perl5i meta object bietet sowohl linear_isa(), wie MRO (es nur nennt MRO) und ISA(), die die Klasse zurückgibt @ISA
. Es kann verwendet werden, um einen Baum unter Verwendung einfacher Rekursion zu konstruieren, ohne in Symboltabellen zu gelangen.
use perl5i::2;
func print_isa_tree($class, $depth) {
$depth ||= 0;
my $indent = " " x $depth;
say $indent, $class;
for my $super_class ($class->mc->ISA) {
print_isa_tree($super_class, $depth+1);
}
return;
}
my $Class = shift;
$Class->require;
print_isa_tree($Class);
__END__
DBIx::Class
DBIx::Class::Componentised
Class::C3::Componentised
DBIx::Class::AccessorGroup
Class::Accessor::Grouped
Ist das vielleicht eine Trickfrage, deren Antwort Sie wollen das nicht tun? Manchmal solltest du Polymorphismus einfach machen lassen. Normalerweise sogar vielleicht. – tchrist
@tchrist - kein Trick. Ich musste das nie tun (wie in deinem Kommentar und den Antworten erwähnt, ist es nicht etwas, das man normalerweise tun sollte); so dass, wenn die Notwendigkeit zu berücksichtigen, "wie" entstand bei der Beantwortung [this] (http://stackoverflow.com/questions/10869511/is-there-a-way-to-know-the-methods-ofan-instance) -von-einer-unbekannten-Klasse-in-perl/10869712 # 10869712), war ich mit der Notwendigkeit konfrontiert, eine AN-Implementierung auszuwählen. Und ich glaube fest an TIMTOWTDIBSWABTO. – DVK