2016-01-05 28 views
5

如何在Perl 6中定義Ints的Array-Reference的自定義類型?我想這一點,但它不工作:如何在Perl 6中定義Ints的ArrayReference的自定義類型?

subset Array_of_Int of Array where *.all ~~ Int; 

my $n = My::Class.new(option => < 22 3 4 5 >); 

# Type check failed in assignment to $!option; expected My::Class::Array_of_Int but got List in block <unit> at ... 

回答

5

在我的::類:

has Int @.option; 
2

我不知道爲什麼這樣做,最perl6程序員聲明子集數組元素而不是數組本身。 Rakudo決定創建List而不是Array - >在使用Rat類型而不是Num時出現相同的陷阱。無論如何,這是可能的。子集不是完全限定類型(它不可能實例化)。你必須明確地創建一個數組$aoi = Array[Int].new(1,2,3,4,5,6)

> subset AoI of Array of Int 
> my AoI $aoi; 
> $aoi = Array[Int].new  
> $aoi.append(1,2,3,4) 
    [1 2 3 4] 
> $aoi.append("mystr") 
Type check failed in assignment to ; expected Int but got Str 
in block <unit> at <unknown file> line 1 
+0

我只需要'爲int @ .option',但我不知道之前。 –