我想限制Perl6中某些函数的返回类型。 我知道,如何推断函数的正确返回类型,在Perl6中返回标量或数组,但我不知道如何使用特定类型的哈希值作为返回值?
示例:可以在test_arr()
中看到数组方法,并且可以在test_hash()
中看到哈希方法。所以我想指定test_hash()
的返回值,以返回A类的哈希值。
#!/usr/bin/env perl6
use v6.c;
use fatal;
class A {
has Str $.member;
}
sub test_arr() returns Array[A] {
my A @ret;
@ret.push(A.new(member=>'aaa'));
return @ret;
}
sub test_hash() { #TODO: add `returns FANCY_TYPE`
my A %ret;
%ret.append("elem",A.new(member=>'aaa'));
%ret.append("b",A.new(member=>'d'));
return %ret;
}
sub MAIN() returns UInt:D {
say test_arr().perl;
say test_hash().perl;
return 0;
}
答案 0 :(得分:6)
它与数组真的相同:
sub test_hash() returns Hash[A] {
my A %ret;
%ret.append("elem",A.new(member=>'aaa'));
%ret.append("b",A.new(member=>'d'));
return %ret;
}
请注意,您也可以撰写%ret<elem> = A.new(...)
。
更新:对于A
数组的哈希,你需要做同样的事情,你只需要明确每一步的类型:
sub test_hash() returns Hash[Array[A]] {
my Array[A] %ret;
%ret<elem> = Array[A].new(A.new(member => 'aaa'));
return %ret;
}
但不要夸大它; Perl 6并不像Haskell一样强类型,并试图表现得像是赢得了良好的编码体验。