Несколько компонентов в срезе массива - эквивалент perl5: @a [0..1,3]

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

Как вы выбираете несколько диапазонов из массива perl6?

my @a = "a","b","c","d";

@a[0..1,3] # expecting array with a, b & d as p5

Кажется, это возвращает какой-то вложенный список, что синтаксис Perl 6 для достижения результата, который будет иметь значение в Perl 5 (т.е. Массив с a, b & d)?

Ответ 1

Ваш вопрос немного запутан, но если вы только что опечатали или что-то еще, я постараюсь угадать, о чем вы спрашиваете.

Это делает простой массив:

> my @a = "a", "b', "c", "d";
[a b c d]

Это делает анонимный массив Range от 0..1 и 3:

> @[0..1,3];
[0..1 3]

Если вы хотите, чтобы он вытащил значения из массива @a, вы должны обратиться к нему:

> @a[0..1,3];
((a b) d)

вытаскивает биты, которые вы просили у @a. Первый элемент - это 0..1 части @a, (a,b) - (Не знаете, почему вы хотите увидеть c здесь..)

Что вложенный список - два бита, которые вы запросили, включают список в первом поле и значение d вы запросили во втором поле.

Если вы хотите, чтобы он был сплющен, а не вложен, вы можете использовать .flat:

> @a[0..1,3].flat;
(a b d)

Ответ 2

В Perl 6, 0..1 приводит к одному элементу, который является диапазоном. В Perl 5 0..1 немедленно расширяется на два числа.

Одна из моих самых распространенных ошибок в Perl 6 - это забыть о сглаженных вещах. Положительным моментом является то, что в Perl 6 мы в основном получаем эквивалент ссылок на Perl 5 бесплатно, что устраняет множество беспорядочных ссылок и разыменований.