是否可以创建返回函数的关联数组?类似的东西
%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });
谢谢
是否可以创建返回函数的关联数组?类似的东西
%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });
谢谢
这是可能的,但在处理匿名函数时,您可能想要my ($x) = @_;
代替$x = @_;
并删除函数名。
然后你可以调用函数$a{first}->([arg])
my %a = ('first' => sub { my ($x) = @_; sprintf("(first %s)", $x); });
如此接近......你错过的一个细节是你在那里定义了一个匿名子,所以你不应该给它一个名字:
$ perl -E '%a = (first => sub { $x = @_; sprintf("(first %s)", $x); }); say $a{first}->(3);'
(first 1)
(请注意,使用$x = @_
,您将设置$x
为 中的项目数@_
,而不是数组中的第一项,这就是为什么输出是“前 1”而不是“前 3”的原因。)
您可以存储对匿名子例程的引用:
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);
这通常称为“调度表”。
首先,perl 中没有关联数组。它是一个散列 是的,您可以在散列中存储对子例程的引用;
my %hash=(
'function'=>\&subroutine,
);
sub subroutine{
print "hai";
}
或者您可以在哈希中创建它