在perl中返回函数的关联数组
是否可以创建返回函数的关联数组? 类似的东西在perl中返回函数的关联数组,perl,hash,associative-array,Perl,Hash,Associative Array,是否可以创建返回函数的关联数组? 类似的东西 %a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); }); 谢谢这是可能的,但您可能想要my($x)=@而不是$x=@和删除函数名 然后可以调用函数作为$a{first}->([arg]) 如此接近。。。您遗漏的一个细节是,您在此处定义了一个匿名sub,因此不应该给它命名: $ perl -E '%a = (first => sub { $x = @_; sp
%a = ('first' => sub first { $x = @_; sprintf("(first %s)", $x); });
谢谢这是可能的,但您可能想要
my($x)=@代码>而不是$x=@在处理匿名函数时,code>和删除函数名
然后可以调用函数作为$a{first}->([arg])
如此接近。。。您遗漏的一个细节是,您在此处定义了一个匿名sub,因此不应该给它命名:
$ perl -E '%a = (first => sub { $x = @_; sprintf("(first %s)", $x); }); say $a{first}->(3);'
(first 1)
(请注意,使用$x=@
,您将$x
设置为@
中的项数,而不是数组中的第一项,这就是为什么输出是“first 1”而不是“first 3”。您可以存储对匿名子例程的引用:
sub first {
my ($x)= @_;
sprintf("(first %s)", $x);
}
my %a = ('first' => \&first);
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";
}
或者你可以在散列中创建它$a{first}->([arg])
应该是ie.$a{first}->(3)
我的意思是这一行我得到了编译器错误%a=('first'=>次第一个{$x=@;sprintf((第一个%s)”,$x);})
您需要删除函数名,只需使用sub{..}
perldoc-perldata:Perl有三种内置数据类型:标量、标量数组和标量关联数组,称为“哈希”。