Как я могу сдвинуть переданную ссылку на массив непосредственно в массив? - PullRequest
4 голосов
/ 20 октября 2010

У меня есть функция (назовем ее foo($array_reference, ...)), которая ожидает ссылку на массив среди других параметров. Я хочу, чтобы foo сдвинул ссылку на массив из списка параметров, переданных ему непосредственно в массив, без необходимости сдвигать его как ссылку на массив, а затем отдельно преобразовать его в массив.

То, что я хочу, должно быть примерно таким:

my @bar = @{shift};

Что я не хочу, но в данный момент я застрял с:

my $bar = shift;
my @bar = @{$bar}

Последний подход тратит впустую строки, тратит память и заставляет меня ненавидеть автора этого типа кода на Perl с пламенной страстью. Помогите, пожалуйста?

Ответы [ 5 ]

10 голосов
/ 20 октября 2010

Не беспокойтесь о «пустых строках, ненужной памяти». Обе строки кода и памяти дешевы.

Вы можете работать с @_, как с любым массивом, включая разыменование. Похоже, вы хотите один из:

my @bar = @{+shift};
my @bar = @{$_[0]};
5 голосов
/ 20 октября 2010

Попробуйте my @bar = @{shift()}; или my @bar = @{CORE::shift()};

Perl предупредит вас, что @{shift} неоднозначно, если вы включите предупреждения с помощью use warnings;.

4 голосов
/ 20 октября 2010

Так как его здесь нет, и я считаю, что это самый ясный способ устранить неоднозначность:

my @bar = @{shift @_}

Причина, по которой каждый из ответов здесь добавляет несловой символ внутри @{ ... }, заключается в том, что внутри скобок shift рассматривается как голое слово без кавычек (аналогично abc => 1 или $hash{key}). Вы можете добавить +, ;, (), @_ или другие несловесные символы для принудительной интерпретации как кода.

2 голосов
/ 20 октября 2010

Я думаю, что это работает:

 my @bar = @{(shift)};
1 голос
/ 20 октября 2010

Вам не нужно явно сдвигать свои аргументы; @_ содержит прямые псевдонимы для них.

sub my_method
{
    my $this = shift;
    my @array = @{$_[0]};

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...