可以创建返回函数的关联数组吗?类似这样的东西
%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });谢谢
发布于 2013-05-16 20:19:17
这是可能的,但在处理匿名函数时,您可能希望使用my ($x) = @_;而不是$x = @_;,并使用删除函数名。
然后,您可以将函数作为$a{first}->([arg])调用
my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });发布于 2013-05-16 21:00:54
如此接近..。您遗漏的一个细节是您在那里定义了一个匿名子,所以您不应该给它命名:
$ perl -E '%a = (first => sub { $x = @_; sprintf("(first %s)", $x); }); say $a{first}->(3);'
(first 1)(请注意,对于$x = @_,您将$x设置为@_中的项数,而不是数组中的第一项,这就是为什么输出是"first 1“而不是"first 3”的原因。)
发布于 2013-05-16 21:22:15
您可以存储对匿名子例程的引用:
my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });
或对命名子例程的引用:
sub first {
my ($x)= @_;
sprintf("(first %s)", $x);
}
my %a = ('first' => \&first);在这两种情况下,您都以相同的方式取消对它们的引用。
my @result = $a{first}->(@args);这通常被称为“调度表”。
https://stackoverflow.com/questions/16587161
复制相似问题