什么是shift-> somesub()在Perl中做什么?

4 perl

我已经读了这段代码一段时间了,我无法弄明白.以下是做什么的?

sub shared  { shift->state(broadcast => @_) }
Run Code Online (Sandbox Code Playgroud)

https://metacpan.org/source/GRAY/WebService-Google-Reader-0.21/lib/WebService/Google/Reader.pm#L72

fri*_*edo 13

在面向对象的Perl中,一个方法的调用者(在其上的方法被称为一点,无论是一个类或一个类的实例)被传入子程序作为第一个参数.

子程序的参数可在特殊数组中找到@_.shift删除数组的第一个元素并返回它.如果未指定显式参数shift,则@_默认情况下处理.

OO方法的通常模式是做类似的东西

# foo method
sub foo { 
    my $self = shift;
    # do stuff to $self
    $self->othermethod;
}
Run Code Online (Sandbox Code Playgroud)

这里发生的是他们只是使用快捷方式来避免创建变量$self,并state直接从返回的调用方调用方法shift.所以你的方法相当于:

sub shared { 
    my $self = shift;
    $self->state( broadcast => @_ );
}
Run Code Online (Sandbox Code Playgroud)

  • 胖子逗号右侧的数组让我感到畏缩. (9认同)
  • 在任何子程序之外,`shift`在`@ ARGV`上运行; 这可能与此无关. (2认同)