perl – 确定是否已从基类重写基类子例程

perl – 确定是否已从基类重写基类子例程,第1张

概述这个问题困扰了我,但我已经解决了问题,并将发布我的答案. 我有一个名为Parent的基类 亲 package Parent;sub new { my $c = shift; my $s = {}, bless $s, $c; return $s;}sub who { return "parent";}1; 这个父类暴露了一个方法;谁. 我写了两个孩子 这个问题困扰了我,但我已经解决了问题,并将发布我的答案.

我有一个名为Parent的基类

package Parent;sub new {    my $c = shift;    my $s = {},bless $s,$c;    return $s;}sub who {    return "parent";}1;

这个父类暴露了一个方法;谁.

我写了两个孩子课:Child和Freak.只有孩子才能覆盖谁.

儿童

package Child;use base 'Parent';sub who {    return "child";}1;

怪物

package Freak;use base 'Parent';1;

基类如何确定是否已重写方法的基础?

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

package Parent;sub new {    my $c = shift;    my $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 – 确定是否已从基类重写基类子例程全部内容,希望文章能够帮你解决perl – 确定是否已从基类重写基类子例程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1213549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存