我正在使用map来提取2D数组的第一个元素.这是一个小代码片段.
my $array = [ [1,11,111], [2,22], undef, [4] ];
my @firstList = map { (defined $_) && $_->[0] } @$array;
Run Code Online (Sandbox Code Playgroud)
所以在这里我期待map返回一个数组,其元素的值为undef或$ array元素的第一个元素.
但输出与我期望的不一样.对于undef,我得到'标量'类型的元素.
如果我用以下块更改map语句,那么我得到了预期的结果.
my @firstList = map { $_->[0] } @$array;
Run Code Online (Sandbox Code Playgroud)
请帮我理解这两个地图陈述.
它们都返回最后执行的操作的结果。
对于第一个,当它计算(defined $_) && $_->[0]for时undef,它发现 为defined $_false 并停止处理布尔表达式。$_->[0]在这种情况下根本不会被评估。defined $_是评估的最后一个操作,其结果是false,我猜它用 表示0。
@$array对于第二个,它是从子级获取值的实际值undef。
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |