Несколько компонентов в срезе массива - эквивалент 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 бесплатно, что устраняет множество беспорядочных ссылок и разыменований.