DVK*_*DVK 8 oop perl superclass isa
是否有标准的CPAN方法来查找Perl类的所有超类(或更好的整个超类树,直到UNIVERSAL)?
或者是简单检查@{"${$class}::ISA"}
每个班级,班级的父母等等的最佳做法?
没有"标准方式",因为这不是您想要做的标准事情.除了可视化之外,想要检查继承树的是OO红旗.
除了Class :: ISA之外,还有mro :: get_linear_isa().两者都已经存在核心一段时间,所以它们可以被认为是某些定义的"标准".这两个都显示继承作为一个平面列表,而不是一个树,这对于深层魔法很有用.
该perl5i元对象同时提供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
Run Code Online (Sandbox Code Playgroud)
我认为Class::ISA是您正在寻找的东西
use Class::ISA;
use Mojolicious;
print join "\n", Class::ISA::super_path("Mojolicious");
Run Code Online (Sandbox Code Playgroud)
印刷:
Mojo
Mojo::Base
Run Code Online (Sandbox Code Playgroud)
然而,这不是某种“最佳实践”,因为整个任务并不是 Perl 程序员每天都在做的事情。