perl – 为什么映射的参数之间不需要逗号?

前端之家收集整理的这篇文章主要介绍了perl – 为什么映射的参数之间不需要逗号?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_6@ 为什么以下有效?

my @ys = map { $_ * $_ } @xs;

而以下无效?

my @ys = map { $_ * $_ },@xs;

map是一个语言结构而不是真正的函数,还是有特殊的块规则?

解决方法

map是列表运算符和核心函数.这是一种简单的Perl语法,它在子例程的块参数之后不需要逗号.关于地图的特殊之处在于它还可以采用表格地图EXPR,LIST.如果将其与标准子例程一起使用,则仅评估EXPR并将其作为第一个参数传递.

块参数对所有子例程都有效,如果将原型应用于子例程定义,则可以使用块参数.例如,您可以通过编写来定义一个行为方式相同的mymap

use strict;
use warnings;
use 5.010;

sub mymap(&@) {
  use Data::Dump;
  my $sub = shift;
  my @newlist;
  push @newlist,$sub->($_) for @_;
  @newlist;
}

say for mymap { $_ * $_ } 1,2,3;

产量

1
4
9

但总的来说,除非你确切知道自己在做什么,否则应该避免使用原型.通常有一种更好的编写代码方法.

猜你在找的Perl相关文章