我怀疑这可能是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);
Run Code Online (Sandbox Code Playgroud)
在Rakudo Star 2016.07.1(来自Fedora 24 repos),该程序给出以下错误:
[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 …Run Code Online (Sandbox Code Playgroud)