作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
isa('UNIVERSAL') 那样遍历继承树。 这是一个例子: use 5.10.1; -6ren">
请注意 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');
是否有更好的方法(不使用 no strict 'refs';
)来检测类的直接父类?谢谢。
最佳答案
我不认为查看类的 @ISA
数组有什么问题,事实上,这就是 Perl 所做的,而且几乎可以肯定任何诊断模块都会这样做。请记住,当您知道为什么要这样做时,关闭部分 strict
并没有什么坏处,这就是其中一种情况。
对于您的实际问题,使用谷歌搜索可以找到一些可能性,其中 Curtis Poe (Ovid) 的 Class::Sniff
可能是最好的例子。
我知道Data::Printer
转储对象时打印出类层次结构。它的输出是为人类读者准备的,但您可以查看它的代码以了解它的作用。同样,我几乎可以肯定它完全符合您在示例中所做的!
关于perl - 如何在 "nicely"中检测 Perl 类的直接父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028241/
我是一名优秀的程序员,十分优秀!