【问题标题】:What does "my ($self, %myInputs) = @_;" mean?“我的 ($self, %myInputs) = @_;” 是什么意思?意思是?
【发布时间】:2012-12-17 06:57:23
【问题描述】:

我在 perl 模块中多次遇到这条线,但我无法弄清楚这到底是什么意思。

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

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

【问题讨论】:

    标签: perl perl-module


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我的 ($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??
      

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

      【讨论】:

      • 但是使用 $self 有什么用!这让我很困惑!
      • @user1855888 $self 指的是您正在调用的对象。如果您调用my $a Animal->new,然后调用$a->run,那么sub run {} 内部的$self(第一个参数)将设置为$a。在其他语言中,您称之为this。如果你习惯了,你也可以在 Perl 中称它为 $this,my $this = shift(尽管它违反惯例)。
      【解决方案3】:

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

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

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

      @_ 表示散列变量% 中变量$ 的参数

      【讨论】:

        猜你喜欢
        • 2011-01-24
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        相关资源
        最近更新 更多