【发布时间】:2014-09-11 12:41:52
【问题描述】:
您好,我有一个函数,我使用哈希向其传递参数,这样:
&group_AoA_to_HoA_by_AoAs_columns({
AoA => \@group_file_by_line_numbers_AoA,
HoA => \%group_file_by_group_names_HoA,
key_index => 0,
columns => "ALL",
save_method => \&append_or_overwrite,
action => "ADD"
});
在这个函数中,我以这种方式访问传递的变量:
my $AoA = $args->{"AoA"};
my $HoA = $args->{"HoA"};
my $key_index = $args->{"key_index"};
my $columns = $args->{"columns"};
my $save_method = $args->{"save_method"};
my $action = $args->{"action"};
参数"save_method" 是另一个函数的名称(作为参数传递给group_AoA_to_HoA_by_AoAs_columns 函数)。这个函数也被调用(来自group_AoA_to_HoA_by_AoAs_columns 函数)并带有一些传递的参数:
$save_method->({
action => $action,
position => \$HoA->{ $array->[$key_index] },
data => [@selected_columns],
});
参数"action"第一次传递给"group_AoA_to_HoA_by_AoAs_columns"函数,第二次传递给"save_method"所指的函数。这种说法没有其他原因。
所以最后我的问题是,是否可以将此代码重写为更统一的等效代码,从中可以立即清楚"action" 参数仅由"save_method" 所指的函数使用?像这样就可以了:
&group_AoA_to_HoA_by_AoAs_columns({
AoA => \@group_file_by_line_numbers_AoA,
HoA => \%group_file_by_group_names_HoA,
key_index => 0,
columns => "ALL",
save_method => \&append_or_overwrite({
action => "ADD"
})
});
【问题讨论】:
-
下面有很多好的建议,但我只是想添加一条评论。请不要使用
&调用 Perl 子例程。自 1994 年以来就没有必要这样做了,而且可能会令人困惑。