我已经阅读了这段代码一段时间了,我无法弄明白。以下是做什么的?
sub shared { shift->state(broadcast => @_) }
https://metacpan.org/source/GRAY/WebService-Google-Reader-0.21/lib/WebService/Google/Reader.pm#L72
答案 0 :(得分:13)
在面向对象的Perl中,方法的 invocant (调用该方法的东西,无论是类的类还是类的实例)都作为第一个参数传递给子例程。 / p>
子程序的参数可在特殊数组@_
中找到。 shift
删除数组的第一个元素并返回它。如果您没有为shift
指定明确的参数,则默认情况下它适用于@_
。
OO方法的通常模式是做
之类的东西# foo method
sub foo {
my $self = shift;
# do stuff to $self
$self->othermethod;
}
这里发生的是他们只是使用快捷方式来避免创建变量$self
,并且直接从state
调用调用者的shift
方法。所以你的方法相当于:
sub shared {
my $self = shift;
$self->state( broadcast => @_ );
}