Что делает shift-> somesub () в Perl? - PullRequest
4 голосов
/ 13 декабря 2011

Я уже некоторое время читаю этот код и не могу его понять. Что делает следующее?

sub shared  { shift->state(broadcast => @_) }

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

1 Ответ

13 голосов
/ 13 декабря 2011

В объектно-ориентированном Perl invocant метода (объект, для которого был вызван метод, либо класс, либо экземпляр класса) передается в подпрограмму в качестве первого параметра.

Параметры подпрограмм находятся в специальном массиве @_. shift удаляет первый элемент массива и возвращает его. Если вы не укажете явный аргумент для shift, по умолчанию он будет работать на @_.

Обычный шаблон для ОО-методов - делать такие вещи, как

# foo method
sub foo { 
    my $self = shift;
    # do stuff to $self
    $self->othermethod;
}

То, что здесь происходит, заключается в том, что они просто используют ярлык, чтобы избежать создания переменной $self, и вызывают метод state для инвоканта, который был возвращен непосредственно из shift. Таким образом, ваш метод эквивалентен:

sub shared { 
    my $self = shift;
    $self->state( broadcast => @_ );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...