Бер*_*ров 2 oop perl inheritance
请注意,在这种情况下,UNIVERSAL :: isa对我不起作用.我不想像继续那样走向继承树__PACKAGE__->isa('UNIVERSAL').
这是一个例子:
use 5.10.1;
use strict;
use warnings;
use utf8;
{
package Parent;
#How to do this more elegantly?
sub inherits_from_parent {
no strict 'refs';
return (__PACKAGE__ eq @{"$_[0]\::ISA"}[0]);
}
}
{
package Child;
use parent -norequire, qw(Parent);
}
package main;
say "Child directly inherits from Parent"
if Child->inherits_from_parent;
#not wat I want
say 'Child is universal:'.Child->isa('UNIVERSAL');
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法(不使用no strict 'refs';)来检测类的直接父级?
谢谢.
我不认为查看@ISA该类的数组有什么问题,事实上,这就是Perl所做的,几乎可以肯定是任何诊断模块都会做的.请记住,strict当你知道为什么要这样做时,关闭部分是没有任何邪恶的,这就是其中一个案例.
对于你的实际问题,一点点谷歌搜索已经产生了一些可能性,其中柯蒂斯坡(奥维德)Class::Sniff可能是最好的例子.
我知道Data::Printer在转储对象时打印出类层次结构.它的输出适用于人类读者,但您可以查看其代码以了解它的作用.再说一次,我几乎可以肯定它完全符合你的例子!