【发布时间】:2012-09-21 16:35:20
【问题描述】:
这是来自面向对象的 Perl 的一个问题。我应该设计一个模块:
1)存储值
2) 计算总数、平均值、计数。
我应该在面向对象的 Perl 中找到与方法覆盖或多态性或继承相关的代码。
我的代码是这样的:
package Stats;
use strict;
use warnings;
sub new {
my $class = @_;
my $self = {};
bless $self, $class;
$self->clear();
return $self;
}
sub clear {
my $self = $_[0];
$self->{'numlist'} = undef;
$self->{'x_sum'} = 0;
$self->{'x2_sum'} = 0;
}
sub addValue {
my $self = $_[0];
my $num = $_[1];
if (defined $num) {
push @{$self->{'numlist'}}, $num;
$self->{'x_sum'} += $num;
$self->{'x2_sum'} += $num**2;
}
}
sub getTotal {
my $self = $_[0];
return $self->{'x_sum'};
}
sub getMean {
my $self = $_[0];
my @numlist = @{$self->{'numlist'}};
if (!@numlist) { return 0; }
return $self->getTotal()/@numlist;
}
sub getValueList {
my $self = $_[0];
return @{$self->{'numlist'}};
}
1;
sub results {
my $obj = new Stats(13,4,56,43,33);
print "Number of values: ", scalar($obj->getValueList()), "\n";
print "Total: ", $obj->getTotal(), "\n";
print "Mean: ", $obj->getMean(), "\n";
}
我哪里错了?
【问题讨论】:
-
你是
use strict和use warnings吗?这将帮助您解决一些问题…… -
如果这是一个家庭作业问题,应该这样标记
-
@gcbenison 错了,作业标签是deprecated
-
您的代码有很多与任何面向对象的 Perl 完全无关的基本错误。在考虑继承和多态性之前,您可能需要进一步学习该语言。
-
再一次,你应该
use strict和use warnings。这将指出您的代码的大多数问题。我相信您可以解决这些问题,因为错误消息会非常清楚地指出问题。那时,代码将编译并运行而不会抱怨,但仍然无法正常工作。此时(但不是更早),您可以使用固定代码更新您的问题,并寻求进一步的帮助,如果需要,我将很乐意提供。
标签: perl