Объявление массивов в Perl6 с несколькими диапазонами - PullRequest
9 голосов
/ 28 июня 2019

Я пытаюсь создать массив в Perl6 с двумя разными диапазонами, как в Perl5:

my @cols = (3..9, 11..16);
use Data::Printer:from<Perl5>;
p @cols; exit;

Однако это создает двумерный массив

[
    [0] [
            [0] 3,
            [1] 4,
            [2] 5,
            [3] 6,
            [4] 7,
            [5] 8,
            [6] 9
        ],
    [1] [
            [0] 11,
            [1] 12,
            [2] 13,
            [3] 14,
            [4] 15,
            [5] 16
        ]
]

когда это должен быть массив 1d, как (3..9, 11..16) было бы в Perl5:

[
    [0]  3,
    [1]  4,
    [2]  5,
    [3]  6,
    [4]  7,
    [5]  8,
    [6]  9,
    [7]  11,
    [8]  12,
    [9]  13,
    [10] 14,
    [11] 15,
    [12] 16,
    [13] 17,
    [14] 18,
    [15] 19,
    [16] 20
]

Конечно, я могу легко обойти это с помощью append, но как я могу получить результат Perl5 (3..9, 11..16) в Perl6 только в одной строке?

1 Ответ

11 голосов
/ 28 июня 2019

Оператор .. создает объект Range , и, таким образом, вы создаете список с двумя диапазонами. Чтобы составить список значений в диапазонах, необходимо развернуть их и сгладить их.

Вот два способа:

  • Используйте Slip :

     my @cols = (|(3..9), |(11..16))
    
  • или flat:

     my @cols = (3..9, 11..16).flat
    
...