首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在perl中返回函数的关联数组

在perl中返回函数的关联数组
EN

Stack Overflow用户
提问于 2013-05-16 20:14:58
回答 4查看 205关注 0票数 3

可以创建返回函数的关联数组吗?类似这样的东西

代码语言:javascript
运行
复制
%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-16 20:19:17

这是可能的,但在处理匿名函数时,您可能希望使用my ($x) = @_;而不是$x = @_;,并使用删除函数名

然后,您可以将函数作为$a{first}->([arg])调用

代码语言:javascript
运行
复制
my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });
票数 6
EN

Stack Overflow用户

发布于 2013-05-16 21:00:54

如此接近..。您遗漏的一个细节是您在那里定义了一个匿名子,所以您不应该给它命名:

代码语言:javascript
运行
复制
$ perl -E '%a = (first => sub { $x = @_; sprintf("(first %s)", $x); }); say $a{first}->(3);'
(first 1)

(请注意,对于$x = @_,您将$x设置为@_中的项数,而不是数组中的第一项,这就是为什么输出是"first 1“而不是"first 3”的原因。)

票数 5
EN

Stack Overflow用户

发布于 2013-05-16 21:22:15

您可以存储对匿名子例程的引用:

my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });

或对命名子例程的引用:

代码语言:javascript
运行
复制
sub first { 
  my ($x)= @_; 
  sprintf("(first %s)", $x);
}

my %a = ('first' => \&first);

在这两种情况下,您都以相同的方式取消对它们的引用。

代码语言:javascript
运行
复制
my @result = $a{first}->(@args);

这通常被称为“调度表”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16587161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档