gpt4 book ai didi

perl - 在 Perl OOP 中继承抽象方法时找不到方法错误

转载 作者:行者123 更新时间:2023-12-05 08:21:30 25 4
gpt4 key购买 nike

我有一个从父类(super class)调用方法的子类。父类(super class)中的方法使用在父类(super class)中定义为抽象(不是真正的抽象)但在子类中实现的方法。

例如:

package BaseClass;

sub new
{

}
sub method1 {

return someAbstractMethod();
}



sub someAbtsractMethod
{
die "oops, this is an abstract method that should " .
"be implemented in a subclass" ;
}
1;

package SubClass;

sub new
{

}

sub someAbtsractMethod
{
print "now we implement the asbtract method";
}
1;

现在当我这样做时:

$sub = new SubClass();
$sub->method1();

...它调用抽象消息,我得到指定的错误消息。如果我从父类(super class)中取出抽象方法,只将实现留在子类中,它就无法识别该方法,我会得到子程序抽象方法未找到的错误。

最佳答案

您还没有在父类和子类之间建立 IS_A 关系。

您可以使用 base 来做到这一点Ivan 建议的编译指示,或者您可以操作 @ISA 数组。或者您可以使用 parent语用。

@ISA:

package SubClass;
our @ISA = qw( BaseClass );

parent :

package SubClass;
use parent qw( BaseClass );

顺便说一句,永远不要使用间接对象语法。要调用您的构造函数,请执行以下操作:

我的 $foo = SubClass->new();

此外,您似乎没有使用 strictwarnings编译指示。这样做。总是。

最后,如果您在一个文件中有多个包,将每个包包含在一个 block 中会很有帮助。

查看 perlbootperltoot ,它们是 perldoc 中方便的 OOP 教程。

更新:

我刚刚注意到您的方法调用已损坏。您需要在每个方法中找到调用类或实例。

package BaseClass;

sub new { bless {}, shift; } # horrible constructor - do not reuse.

sub abstract { die "The present situation is abstract"; }

sub method { my $self = shift; $self->abstract; }


package SubClass;

our @ISA = qw( BaseClass );

sub abstract { print "It's alive\n" );

在脚本中:

my $obj = SubClass->new;
$obj->method;

my $base = BaseClass->new;
$base->method;

一定要阅读我链接到的教程。他们会帮助你。

关于perl - 在 Perl OOP 中继承抽象方法时找不到方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601526/

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