【发布时间】:2013-12-11 11:32:41
【问题描述】:
有一个简单的示例代码
use Modern::Perl;
use Data::Dumper;
package My;
use Moose;
use Method::Signatures::Simple;
has 'result' => (
is => 'rw',
isa => 'HashRef',
default => sub{{}},
clearer => 'clear_result'
);
method run {
$self->clear_result; #clearing the result
$self->result( $self->run_part1 );
$self->do_something;
$self->result( $self->run_part3 ); #need merge
}
method do_something {
$self->result( $self->run_part2 ); #need merge
}
method run_part1 { return { aaa => 'aaa' } }
method run_part2 { return { bbb => 'bbb' } }
method run_part3 { return { ccc => 'ccc' } }
package main;
my $p = My->new;
say Dumper $p->run;
结果(当然)是:
$VAR1 = {
'ccc' => 'ccc'
};
我想要结果:
$VAR1 = {
'aaa' => 'aaa'
'bbb' => 'bbb'
'ccc' => 'ccc'
};
那么,问题是——设置时如何合并$self->resultHashRef?
是的,我可以添加新方法add_result,例如:
method add_result($hr) {
use Hash::Merge::Simple qw(merge);
$self->result( merge $self->result, $hr );
}
并且在我的代码中将$self->result 更改为$self->add_result,但想知道是否还有其他解决方案...
【问题讨论】: