【发布时间】:2016-08-29 22:06:04
【问题描述】:
这是我第一次将 OOP 与 perl 一起使用。我正在重构一个工作中的 4k 行程序程序。这看起来很简单,但我遇到了继承和 SUPER 的问题。
错误信息:
"Can't locate object method "New" via package "Module::SUPER" at Module.pm line 10"
我尝试过使用 base、parent 和设置 @ISA,但它们都得到相同的错误。我确定我必须忽略一些东西。
(这不是我正在处理的程序中的代码。只是一个产生相同错误的示例)
在此示例中,所有 .pm 和 .pl 文件都位于同一目录中。在我正在处理的程序中,主程序在 bin 中,模块将在 ../modules(相对于 bin)中。
我想这就是我完成这项工作所需要的全部:
use lib "../modules";
如果我的想法有误,请告诉我。
父模块
package BaseModule;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = {
ARRAY => shift,
DIVIDER => ","
};
bless ($self, $class);
return $self;
}
sub array {
my $self = shift;
if(@_) { $self->{ARRAY} = shift };
return $self->{ARRAY};
}
sub divider {
my $self = shift;
if(@_) { $self->{DIVIDER} = shift };
return $self->{DIVIDER};
}
sub testSub {
my $self = shift;
print join($self->{DIVIDER}, @{ $self->{ARRAY} } );
return 1;
}
1;
子模块
package Module;
use strict;
use warnings;
#use base qw(BaseModule);
#require BaseModule;
#our @ISA = qw(BaseModule);
use parent qw(BaseModule);
sub new {
my $class = shift;
my $self = $class->SUPER::New(@_);
$self->{STRING} = shift;
bless ($self, $class);
return $self;
}
sub string {
my $self = shift;
if(@_) { $self->{STRING} = shift };
return $self->{STRING};
}
sub testSub {
my $self = shift;
print "$self->{STRING}:\n";
$self->SUPER::testSub();
return 1;
}
1;
如果父类返回一个已经祝福的$self,我需要祝福子类吗?
主脚本
#!/usr/bin/perl
use strict;
use warnings;
use Module;
my $module = Module->new([1, 2, 3, 4, 5], "Example");
$module->divider(" | "); # Test Changing divider;
$module->testSub();
非常感谢任何帮助。
【问题讨论】:
-
我不确定@el.pescado 是什么意思