我怀疑这可能是 Rakudo 中的一个错误,但我今天才开始使用 Perl 6,所以很有可能我只是犯了一个错误。在这个简单的程序中,在 sub 中声明一个类型化数组似乎会让 Perl 6 编译器生气。删除数组上的类型注释可以消除编译器错误。
这是一个简单的素数查找程序:
#!/usr/bin/env perl6
use v6;
sub primes(int $max) {
my int @vals = ^$max; # forcing a type on vals causes compiler error (bug?)
for 2..floor(sqrt($max)) -> $i {
next if not @vals[$i];
@vals[2*$i, 3*$i ... $max-1] = 0;
}
return ($_ if .Bool for @vals)[1..*];
}
say primes(1000);
在 Rakudo Star 2016.07.1(来自 Fedora 24 存储库)上,该程序给出以下错误:
[sultan@localhost p6test]$ perl6 primes.p6
Cannot unbox a type object
in sub primes at primes.p6 line 8
in block <unit> at primes.p6 line 13
如果我删除 vals 数组上的类型注释,则程序可以正常工作:
...
my @vals = ^$max; # I removed the int type
...
我在使用 Perl 6 时是否犯了错误,或者这是 Rakudo 中的错误?