Гипероператор присваивания Perl 6 для вложенного списка не работает должным образом - PullRequest
7 голосов
/ 27 сентября 2019

Здравствуйте. Я пытаюсь использовать гипероператор назначения in Perl 6 https://docs.perl6.org/language/operators#Hyper_operators

my (@one, @two) «=» (<1 2 3>,<4 5 6>);
say @one;
say @two;
# Prints nothing (empty array)

# Expected behaviour:
@one=<1 2 3>;
@two=<4 5 6>;
say @one;
say @two;
# Prints [1 2 3] and [4 5 6]

Как заставить работать гипероператор назначения правильно?Благодаря.

1 Ответ

9 голосов
/ 27 сентября 2019

Вы были близки.Чуть дальше в документах внизу мы находим

Метаоператор zip (не то же самое, что Z) применяет данный инфиксный оператор к парам, взятым одна слева, одна справа от егоАргументы.

Итак

my (@one, @two) Z= <1 2 3>, <4 5 6>;

Вот тест, работающий на текущей сборке разработчика.Он сравнивает приведенный выше «волшебный» вариант с двумя последовательными назначениями.

use v6;
use Benchmark;

my %results = timethese(100000, {
    "magic" => sub { my (@one, @two) Z= <1 2 3>, <4 5 6> },
    "plain" => sub { my @one = <1 2 3>; my @two = <4 5 6> },
});

say ~%results;

# magic   1569668462 1569668464 2 0.00002
# plain   1569668464 1569668464 0 0
...