Что действительно смещается (), делают в Perl?

66
задан Peter Mortensen 12 January 2018 в 15:57
поделиться

6 ответов

shift() созданный в подпрограмме Perl, которая берет массив в качестве аргумента, затем возвращает и удаляет первый объект в том массиве. Это - обычная практика для получения всех параметров, переданных в подпрограмму с shift вызовы. Например, скажите, что у Вас есть подпрограмма foo, который берет три аргумента. Один способ присвоить эти параметры локальным переменным с shift как так:

sub foo() {
  my $x = shift;
  my $y = shift;
  my $z = shift;
  # do something
}

беспорядок здесь состоит в том, что кажется, что сдвиг не передается массив как аргумент. На самом деле это передается массив "по умолчанию" неявно, который является @_ внутренняя часть подпрограмма или @ARGV внешняя сторона подпрограмма.

54
ответ дан cowgod 24 November 2019 в 15:07
поделиться

Эти shift функция удаляет первый элемент из массива и возвращает его. Массив сокращен одним элементом.

массив по умолчанию (если Вам не дают в качестве параметра) @_, если Вы находитесь в функции, или @ARGV, если Вы в объеме файла.

Так в этом случае $x или устанавливается на первый параметр функции, или на первый параметр командной строки.

14
ответ дан Alnitak 24 November 2019 в 15:07
поделиться

Это обычно - идиома для: $x является локальной переменной, присвоенной первому параметру, переданному подпрограмме, хотя.

my ($x) = @_;

, вероятно, более ясно (и это не изменяет список аргументов).

2
ответ дан David Nehme 24 November 2019 в 15:07
поделиться

на языке неспециалиста, от очень высокоуровневого представления, сдвиг берет первый элемент массива (крайняя левая часть), в то время как противоположное поп , который берет последний элемент массива (самая правая часть).

my @array1=(5,6,7,8,9);
my $x = shift @array1;
print "$x\n"; # 5
print "@array1\n"; # 6 7 8 9
0
ответ дан mhd 24 November 2019 в 15:07
поделиться

Если Вы будете в подпрограмме, то эта строка будет shift на @_ (параметрические усилители, которые передаются в).
Так $x был бы первый объект popped от эти @_ массив.

Так обычно Вы видели бы $x = shift if @_;

0
ответ дан serenesat 24 November 2019 в 15:07
поделиться

В Perl много методов используют переменные по умолчанию ($_ и @_) если Вы явно не указываете аргументы. Ваш код идентичен:

my $x = shift @_;

Как указано PullMonkey ранее, в подпрограмме, @_ содержит аргументы, переданные той подпрограмме (как описано в perlsub). shift удалит первое значение аргумента из @_ и сохраните его в $x, так $_[0] теперь даст Вам, второй аргумент передал Вашей подпрограмме.

6
ответ дан Gaurav 24 November 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: