perl - 查找 Perl 类的所有父类(super class)的最佳实践是什么?

标签 perl oop superclass

是否有一种标准的 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/

相关文章:

Python3面向对象编程: Select all objects of a particular class w/o variables

ruby - 为什么不能将类用作模块?

C++:设计、函数模板重写和缺乏多态性

linux - 使用 Proc 文件系统计算进程的内存

perl - Perl 的菱形运算符(空文件句柄)当前从哪个文件读取?

perl - Perl ssh连接并执行telnet连接

c# - 泛型的循环依赖

java - 从 arraylist 调用子类方法

apache-flex - 在哪个事件阶段,父类(super class)可以引用其派生类中潜在的现有组件?

regex - Bareword 在 Perl 脚本中的错误处找到了运算符(operator)预期的位置