Как переслать аргументы в супер функцию в Perl? - PullRequest
0 голосов
/ 31 мая 2018

Я очень начинающий Perl, но у меня есть (более или менее) этот код:

package Base;

sub foo{
  my ($self, $first, $second, $third) = @_;
  # do some magic here!
} 

package Subclass;
use base qw(Base);

sub foo{
  my ($self, $first, $second, $third) = @_;
  #do something with $first only
  return $self->SUPER::foo($first, $second, $third);
}

И метод вызывается с помощью: $self->foo("Hey", "what's", "up");

Есть либолее краткий способ вызова SUPER::foo(), без повторения списка всех аргументов снова?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Это может быть одно из допустимых применений вызова &function;.

Например,

&SUPER::foo;

Как указано в perlsub - это делает @_ видимым для вызываемого субмарина.

Его следует использовать с осторожностью, потому что он отклоняется от того, что вы обычно ожидаете - он не передает аргументы, он делает тот же набор «видимым».

0 голосов
/ 31 мая 2018

вы можете повторно использовать @_ для передачи аргументов, подобных этому

$self->SUPER::foo(@_);

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

sub foo{
  my $self=shift;
  my ($first, $second, $third) = @_;
  #do something with $first only
  return $self->SUPER::foo(@_);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...