试图在Perl中使用OOP.我的问题是我在类中设置了一个变量,但是当我尝试检索它时,该值就丢失了.我确定这个问题很明显,但我需要一些额外的眼睛.
构造函数:
sub new
{
my ($class, $name) = @_;
my $self = {
_name => $name,
_times => []
};
bless ($self, $class);
return $self;
}
Run Code Online (Sandbox Code Playgroud)
accessor/mutator方法:
sub times {
my ($self) = shift;
if (@_) { @{$self->{_times}} = shift }
print "times size: " . @{$self->{_times}} . "\n";
return @{$self->{_times}};
}
Run Code Online (Sandbox Code Playgroud)
来自主程序的电话:
$js->addRun($duration, $curStartTime);
print "Times size: " . @{$js->times()} . "\n";
Run Code Online (Sandbox Code Playgroud)
addRun()子例程中的相关代码:
sub addRun {
my ($self, $duration, $runDateTime) = @_;
if (!defined($duration) || !defined($runDateTime)) { return 0; }
push(@{$self->{_times}},$duration);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它进入addRun子例程并将值推送到_times变量.然后我通过调用accessor/mutator来打印该值.但是accessor/mutator有自己的print命令,所以我可以在返回之前检查它.
访问器打印正确的值,但是当我打印返回的内容时,它是未定义的.我的语法搞砸了吗?我只是个白痴?
谢谢
问题在于你的times()子例程正在返回一个数组,而不是一个数组引用.
然后在你的主程序中,你试图取消引用对times()的调用,但你不需要.
所以在你的主程序中只需按如下方式调用: -
print "Times size: " . $js->times() . "\n";
Run Code Online (Sandbox Code Playgroud)