Индексы массива должны быть родными целыми числами? - PullRequest
6 голосов
/ 04 апреля 2020

Я пытаюсь получить полный элемент массива:

my @lazy-array = lazy 1, 11, 121 ... 10**100;
say @lazy-array[10**50];

Это приводит к

Cannot unbox 167 bit wide bigint into native integer

Та же проблема, если я назначаю его переменной. Это , кажется, не отражено в документации , и задается вопросом, является ли это функцией или ошибкой. Кроме того, каков будет правильный способ доступа к этим позициям (кроме итерации)

1 Ответ

7 голосов
/ 04 апреля 2020

В текущей реализации в Raku, основанной на NQP, индексы массива имеют максимум 63 бита (по крайней мере, на 64-битных сборках).

use nqp;
my $l := nqp::list;
dd nqp::atpos($l,0x7fff_ffff_ffff_ffff);  # Mu
dd nqp::atpos($l,0x7fff_ffff_ffff_ffff + 1);
# Cannot unbox 64 bit wide bigint into native integer

Я бы не стал рассматривать это как функцию или ошибка, но ограничение текущей реализации.

Обратите внимание, что вы можете использовать Array :: Sparse , если хотите использовать индексы большего размера.

...