找出Perl类的所有超类的最佳实践是什么?

前端之家收集整理的这篇文章主要介绍了找出Perl类的所有超类的最佳实践是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有标准的CPAN方法来查找Perl类的所有超类(或更好的整个超类树,直到UNIVERSAL)?

或者是为每个班级,班级的父母等简单地检查@ {“${$class} :: ISA”}的最佳做法?

解决方法

没有“标准方式”,因为这不是您想要做的标准事情.除了可视化之外,想要检查继承树的是OO红旗.

除了Class :: ISA之外,还有mro::get_linear_isa().两者都已经在核心中存在了一段时间,所以它们可以被认为是某些定义的“标准”.这两个都显示继承作为一个平面列表,而不是一个树,这对于深层魔法很有用.

perl5i meta object提供linear_isa(),就像mro(它只是调用mro)和ISA()返回类’@ISA.它可以用于使用简单递归构造树而无需进入符号表.

  1. use perl5i::2;
  2.  
  3. func print_isa_tree($class,$depth) {
  4. $depth ||= 0;
  5.  
  6. my $indent = " " x $depth;
  7. say $indent,$class;
  8.  
  9. for my $super_class ($class->mc->ISA) {
  10. print_isa_tree($super_class,$depth+1);
  11. }
  12.  
  13. return;
  14. }
  15.  
  16.  
  17. my $Class = shift;
  18. $Class->require;
  19.  
  20. print_isa_tree($Class);
  21.  
  22. __END__
  23. DBIx::Class
  24. DBIx::Class::Componentised
  25. Class::C3::Componentised
  26. DBIx::Class::AccessorGroup
  27. Class::Accessor::Grouped

猜你在找的Perl相关文章