Несколько компонентов в срезе массива - эквивалент 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)?

2 ответа

Решение

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

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

> 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)

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

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

Другие вопросы по тегам