gpt4 book ai didi

perl - 确定基类子例程是否已被基类覆盖

转载 作者:行者123 更新时间:2023-12-05 00:43:39 24 4
gpt4 key购买 nike

这个问题难倒了我,但我已经解决了这个问题,并将发布我的答案。

我有一个名为 Parent 的基类

家长

package Parent;

sub new {
my $c = shift;
my $s = {}, bless $s, $c;
return $s;
}

sub who {
return "parent";
}

1;

这个父类公开了一个方法; who .

我写了两个子类: ChildFreak .只有 Child覆盖 who .

child
package Child;

use base 'Parent';

sub who {
return "child";
}

1;

怪物
package Freak;

use base 'Parent';

1;

基类如何判断是否基类 who方法已被覆盖?

我希望能够写出这样的东西
package Parent;

sub new {
my $c = shift;
my $s = {}, bless $s, $c;
return $s;
}

sub who {
return "parent";
}

sub check {
my $self = shift;

my $is_overridden = 1; # what conditional should be here?

return $is_overridden ? "yes" : "no";
}

1;

我可以使用什么条件来确定子例程是否被覆盖?

最佳答案

my $is_overridden = $self->can("who") != Parent->can("who");

请参阅 UNIVERSAL 的文档包,它定义了 can .

另外,我应该添加一个更哲学的注释 - 听起来您的覆盖违反了 Liskov Subsitution Principle ,重构事物可能会更好,以便覆盖方法不是您必须在代码中的其他地方调查的事情。

关于perl - 确定基类子例程是否已被基类覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45226003/

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