我正在尝试创建函数哈希。有多个功能,每个功能都将根据一个键调用。函数和键之间存在一对多的关系。以下工作,但似乎效率低下。 (请注意,我有更多要加载的函数,但有两个函数说明了这一点。)
以下工作但似乎效率低下,尤其是在处理多个功能时(两个看起来不那么糟糕):
my %funcs = ( map {$_ => \>_3} qw (PH DO PWL DEPTH BARO ABSP));
%funcs = (%funcs,
map {$_ => \<_one_third} qw (SPCO SALT RHUM));
我想做的是:
my %funcs = (map {$_ => \>_3} qw (PH DO PWL DEPTH BARO ABSP),
map {$_ => \<_one_third} qw (SPCO SALT RHUM));
我只是不明白为什么第一个有效,第二个没有。在我看来,在每种情况下,右侧都会创建两个哈希值。
由于
答案 0 :(得分:1)
尝试在map
周围(或至少在第一个周围)附加额外的parens
my %funcs = (
( map {$_ => \>_3} qw(PH DO PWL DEPTH BARO ABSP) ),
( map {$_ => \<_one_third} qw(SPCO SALT RHUM) ),
);
答案 1 :(得分:1)
你有
my %funcs = (map {$_ => \>_3} qw (PH DO PWL DEPTH BARO ABSP),
map {$_ => \<_one_third} qw (SPCO SALT RHUM));
如果你在map的参数周围添加parens,你会得到:
my %funcs = (map( {$_ => \>_3} qw (PH DO PWL DEPTH BARO ABSP),
map({$_ => \<_one_third} qw (SPCO SALT RHUM))));
如果你清理它,你会得到:
my %funcs = (
map({ $_ => \>_3 }
qw( PH DO PWL DEPTH BARO ABSP ),
map({ $_ => \<_one_third }
qw( SPCO SALT RHUM ),
),
)
);
如您所见,您将以下内容传递给第一张地图:
'PH', ..., 'SPCO', \<_one_third, 'SALT', \<_one_third, 'RHUM', \<_one_third
您需要做的就是将地图放在地图的args周围:
my %funcs = (
map( { $_ => \>_3 } qw( PH DO PWL DEPTH BARO ABSP ) ),
map( { $_ => \<_one_third } qw( SPCO SALT RHUM ) ),
);
大多数人不知道你可以在地图的args周围使用parens,所以他们将使用以下内容:
my %funcs = (
( map { $_ => \>_3 } qw( PH DO PWL DEPTH BARO ABSP ) ),
( map { $_ => \<_one_third } qw( SPCO SALT RHUM ) ),
);
那也没关系。