“我的($ self,%myInputs)= @_;”是什么意思?

问题描述 投票:7回答:3

我在perl模块中经常遇到过这一行,但我无法弄清楚这究竟意味着什么。

my ($self, %myInputs) = @_;

请向我解释声明,以便我可以继续。

perl perl-module
3个回答
8
投票

我猜这是类方法函数中的第一行。该行解析@_,这是list of the function arguements,并提取第一个参数,它始终是对象的引用到$self,并将其余的提取到哈希%myInputs。这个过程假定函数是用哈希格式的参数调用的,就像下面的Perl / Tk函数一样

$mw->Button(-text => "RIGHT", -command => sub { exit })
  ->pack(-side => 'right', -fill => 'both');

6
投票

我的($ self,%myInputs)= @_;

并非所有函数都接收第一个参数$self。事实上,按惯例,只有使用箭头操作符调用的那些才能执行->;使用->调用隐式发送一个引用该对象的特殊参数。 perl中的所有函数和方法都以相同的方式声明(使用关键字sub)。只有调用才能确定函数是否为方法。

my ($foo, $bar) = ( $x, $y );称为并行分配。这就是这里发生的一切!

可以从Perl中的数组初始化观察哈希。

my @foo = qw/ foo bar baz quz /;
my %hash = @foo;
print $hash{foo}; # outputs bar

因为您正在分配哈希值%myInputs,所以哈希会被明确分配给所有非隐式发送的输入(因为您将其中的一个输入到$self中)。但要小心,做以下事情没有多大意义?

my @foo = qw/ foo bar baz /;
my %hash = @foo;
print $hash{baz} # what is this set too??

出于同样的原因,使用不均匀的参数调用函数也没有多大意义!两者都会产生警告。


1
投票

在Perl中,@_;是一个全局数组特殊变量

@ARGV类似该数组包含用于脚本的命令行参数。

所以在my ($self, %myInputs) = @_;

@_将代表Hash-Variables $中变量%的论证

© www.soinside.com 2019 - 2024. All rights reserved.