Массив переменных массива в Perl 6

Как я могу объявить и создать переменную типа "массив массива" в Perl 6? В документации Perl 6 об этом ничего не сказано. Теоретически я могу это сделать

@@var1

но это не работает.


person アレックス    schedule 23.10.2015    source источник
comment
вы хотите объявить массив массивов или многомерный массив?   -  person Christoph    schedule 23.10.2015
comment
Вам не нужно указывать, из чего состоит внешний массив. my @array; @array[0][0] = 1   -  person Brad Gilbert    schedule 24.10.2015
comment
@BradGilbert, Кристоф сказал, что я должен.   -  person アレックス    schedule 24.10.2015
comment
Объявление типа необязательно, если вы его опустите, вы можете поместить что угодно в массив, включая другие массивы.   -  person Brad Gilbert    schedule 24.10.2015
comment
@AlexanderSupertramp: как уже упоминалось, я описываю ограничение типа - (большинство) вещей будут работать без него!   -  person Christoph    schedule 26.10.2015


Ответы (1)


Как и любое другое ограничение типа, просто поставьте Array перед его именем при его объявлении:

my Array @array-of-arrays;

Теперь вы можете назначить массив как элемент

@array-of-arrays[42] = [1, 2, 3];

или воспользуйтесь авто-вивификацией

@array-of-arrays[1][2] = 42;

Вы также можете выбрать более либеральный Positional в качестве типа элемента, но это нарушит автоматическое оживление.

Массив массивов можно рассматривать как многомерный, поэтому вы также можете использовать мультииндекс для доступа к его элементам:

@array-of-arrays[1;2] = 42;

Насколько мне известно, правильные многомерные массивы, объявленные как

my @multi-dim-array[5;6];

еще не реализованы в Ракудо, но должны появиться до Рождества.

person Christoph    schedule 23.10.2015
comment
в чем разница между my Array @array-of-arrays; и my @array-of-arrays;? - person アレックス; 23.10.2015
comment
проверьте say (my @).WHAT vs say (my Array @).WHAT - первый имеет тип Array, последний имеет тип Array[Array], то есть массив, который принимает только другие массивы в качестве элементов - person Christoph; 23.10.2015
comment
а как насчет массива массива массива? - person アレックス; 23.10.2015
comment
@AlexanderSupertramp: в принципе my Array[Array] @a, но типизированные массивы не очень удобны для использования в Perl6, поскольку они типизированы номинально, а не структурно; чтобы добавить к @a, вам нужно будет сделать что-то вроде @a[0] = (my Array @ = []); часто более прагматично оставлять массивы нетипизированными, но есть заметные исключения (например, массивы с исходной типизацией) - person Christoph; 23.10.2015
comment
Просто примечание: вы даже можете указать тип массива: my Array of Int @i; - person Nikodemus RIP; 16.12.2017