Tôi nghi ngờ đây có thể là một lỗi trong Rakudo, nhưng tôi mới bắt đầu chơi với Perl 6 ngày hôm nay, vì vậy có một cơ hội tốt tôi đang mắc lỗi. Trong chương trình đơn giản này, việc khai báo một mảng được đánh máy bên trong một sub sẽ xuất hiện để làm cho trình biên dịch Perl 6 trở nên tức giận. Loại bỏ chú thích kiểu trên mảng sẽ loại bỏ lỗi trình biên dịch.Perl 6 báo cáo "Không thể unbox một loại đối tượng" khi gõ một mảng
Dưới đây là một số nguyên tố đơn giản việc tìm kiếm chương trình:
#!/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);
On Rakudo sao 2016/07/01 (từ Repos Fedora 24), chương trình này cung cấp cho các lỗi sau:
[[email protected] 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
Nếu tôi loại bỏ chú thích loại trên mảng vals, chương trình hoạt động chính xác:
...
my @vals = ^$max; # I removed the int type
...
Tôi có mắc lỗi không trong việc sử dụng Perl 6 của tôi, hay đây là lỗi trong Rakudo?
Cảm ơn bạn đã giải thích rõ ràng. Tôi đã ban đầu hy vọng cho nó để hành xử như numpy hoặc MATLAB (mà làm mở rộng danh sách ngầm) nhưng đề nghị của bạn không những gì tôi muốn rõ ràng mà có lẽ là tốt hơn (lười biếng vô hạn danh sách là tuyệt vời). – Sultan