我在perl模块中经常遇到过这一行,但我无法弄清楚这究竟意味着什么.
my ($self, %myInputs) = @_;
Run Code Online (Sandbox Code Playgroud)
请向我解释声明,以便我可以继续.
我猜这是类方法函数中的第一行.该行解析@_这是函数arguements的列表,并提取第一PARAM这始终是一个参考对象进入$self,并提取它们中的其余部分成散列 %myInputs.这个过程假定函数是用哈希格式的参数调用的,就像下面的Perl/Tk函数一样
$mw->Button(-text => "RIGHT", -command => sub { exit })
->pack(-side => 'right', -fill => 'both');
Run Code Online (Sandbox Code Playgroud)
我的($ self,%myInputs)= @_;
并非所有函数都接收第一个参数$self.事实上,按照惯例,只有使用箭头操作符调用的那些->; 调用with ->隐式发送一个引用该对象的特殊参数.perl中的所有函数和方法都以相同的方式声明(使用关键字sub).只有调用才能确定函数是否为方法.
这my ($foo, $bar) = ( $x, $y );被称为并行分配.这就是这里发生的一切!
可以从Perl中的数组初始化观察哈希.
my @foo = qw/ foo bar baz quz /;
my %hash = @foo;
print $hash{foo}; # outputs bar
Run Code Online (Sandbox Code Playgroud)
因为您正在分配哈希%myInputs,所以哈希会被明确分配给所有非隐式发送的输入(因为您将其中的一个输入$self).但要小心,做以下事情没有多大意义?
my @foo = qw/ foo bar baz /;
my %hash = @foo;
print $hash{baz} # what is this set too??
Run Code Online (Sandbox Code Playgroud)
出于同样的原因,使用不均匀的参数调用函数也没有多大意义!两者都会产生警告.