isa('UNIVERSAL') 那样遍历继承树。 这是一个例子: use 5.10.1; -6ren">
gpt4 book ai didi

perl - 如何在 "nicely"中检测 Perl 类的直接父级?

转载 作者:行者123 更新时间:2023-12-02 05:33:31 25 4
gpt4 key购买 nike

请注意 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com