在Perl对象的方法中,我想在变量列表上调用另一个方法.像这样使用地图不起作用:
($open, $high, $low, $close)
= map( $self->adjust_for_factor, ($open, $high, $low, $close) );
Run Code Online (Sandbox Code Playgroud)
....
sub adjust_for_factor {
my $self = shift;
my $price = shift;
return $price * $self->get_factor ;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它的丑陋和不规模.我确定必须可以在这里使用地图:
($open, $high, $low, $close)
= ( $self->adjust_for_factor($open)
, $self->adjust_for_factor($high)
, $self->adjust_for_factor($low)
, $self->adjust_for_factor($close) );
Run Code Online (Sandbox Code Playgroud)
我想这是一个以正确的方式引用自我的问题.我无法概念化它们如何组合在一起.
感谢所有花时间考虑/留下反馈的人.
正如@tchrist所说,你忘记了传递$_
给你的方法.正确的方法是
($open, $high, $low, $close)
= map $self->adjust_for_factor($_), $open, $high, $low, $close;
Run Code Online (Sandbox Code Playgroud)
您还可以修改方法,以便它可以接受列表:
sub adjust_for_factor {
my ($self, @prices) = @_;
return map $_ * $self->get_factor, @prices;
}
($open, $high, $low, $close)
= $self->adjust_for_factor($open, $high, $low, $close);
Run Code Online (Sandbox Code Playgroud)