数组索引是否需要是本机整数?
Do array indices need to be native ints?
我正在尝试获取数组的第 10 个元素:
my @lazy-array = lazy 1, 11, 121 ... 10**100;
say @lazy-array[10**50];
这会产生
Cannot unbox 167 bit wide bigint into native integer
如果我将它分配给一个变量,同样的问题。这 does not seem to be reflected in the documentation,想知道它是功能还是错误。此外,访问这些位置的正确方法是什么(迭代除外)
在基于 NQP 的 Raku 的当前实现中,数组索引最多有 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。
我正在尝试获取数组的第 10 个元素:
my @lazy-array = lazy 1, 11, 121 ... 10**100;
say @lazy-array[10**50];
这会产生
Cannot unbox 167 bit wide bigint into native integer
如果我将它分配给一个变量,同样的问题。这 does not seem to be reflected in the documentation,想知道它是功能还是错误。此外,访问这些位置的正确方法是什么(迭代除外)
在基于 NQP 的 Raku 的当前实现中,数组索引最多有 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。