是否有一种标准的 CPAN 方法可以找出 Perl 类的所有父类(super class)(或者更好的是整个父类(super class)树,直到 UNIVERSAL)?
或者最好的做法是简单地检查 @{"${$class}::ISA"}
对于每个类(class),类(class)的家长等?
最佳答案
没有“标准方式”,因为这不是您想做的标准事情。对于可视化以外的任何事情,想要检查您的继承树都是面向对象的危险信号。
除了 Class::ISA,还有 mro::get_linear_isa() .两者都已成为核心一段时间,因此它们可以被视为某些定义的“标准”。两者都将继承显示为一个平面列表,而不是一棵树,这主要用于深度魔法。
perl5i meta object提供两者 linear_isa() ,就像 mro(它只是调用 mro)和 ISA()返回类' @ISA
.它可用于使用简单的递归构造树,而无需进入符号表。
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
关于perl - 查找 Perl 类的所有父类(super class)的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870581/