我对Perl的"map"功能有一些疑问.
特别:
如何
%hash = map {$ _ => 1} @array
创建哈希映射数组的元素为1?块如何返回两个元素的列表?我以为block返回它的最后一个值.=>隐式创建一个列表,而不是","返回其正确的参数?
为什么
%hash = map($ _ => 1),@ array
不行?我试图在这里返回两个元素的列表...在解析器的角度来看,如何在"("修复它之前预先加上"+"?
Leon Timmerm.. 9
问题1:映射块是运行列表上下文,因此允许返回零,一个或多个值.map
将它们全部归还." ,
"或" =>
"在标量上下文中返回它们的右侧,但是在列表上下文中都是双方.有关详细信息,请参阅perlop.
问题2:%hash = map ($_ => 1), @array
被解释为%hash = (map($_, 1), @array)
.换句话说,它返回(1,@ array).在%hash = map +($_ => 1), @array
,+表示()不引用参数列表,因此它被解释为map(+($ _ => 1),@ array);
当天的教训:总是在地图表达中使用赞美,这样你就不会被这些问题所困扰.
问题1:映射块是运行列表上下文,因此允许返回零,一个或多个值.map
将它们全部归还." ,
"或" =>
"在标量上下文中返回它们的右侧,但是在列表上下文中都是双方.有关详细信息,请参阅perlop.
问题2:%hash = map ($_ => 1), @array
被解释为%hash = (map($_, 1), @array)
.换句话说,它返回(1,@ array).在%hash = map +($_ => 1), @array
,+表示()不引用参数列表,因此它被解释为map(+($ _ => 1),@ array);
当天的教训:总是在地图表达中使用赞美,这样你就不会被这些问题所困扰.