加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:25:44 所属栏目:大数据 来源:网络整理
导读:为什么以下有效? my @ys = map { $_ * $_ } @xs; 而以下无效? my @ys = map { $_ * $_ },@xs; map是一个语言结构而不是真正的函数,还是有特殊的块规则? 解决方法 map是列表运算符和核心函数.这是一种简单的Perl语法,它在子例程的块参数之后不需要逗号.关
为什么以下有效?

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读