gpt4 book ai didi

raku - Perl6 : Sub: restrict to static hash-return type

转载 作者:行者123 更新时间:2023-12-04 12:03:41 25 4
gpt4 key购买 nike

我想在 Perl6 中限制我的一些函数的返回类型。
我知道,如何推断函数的正确返回类型,在 Perl6 中返回标量或数组,但我不知道,如果我使用特定类型的哈希作为返回值,我该怎么做?

示例:Array 方法可以在 test_arr() 中看到Hash方法可以在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;
}

最佳答案

它与数组实际上相同:

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 那样强类型,并且试图表现得好像它不会带来良好的编码体验。

关于raku - Perl6 : Sub: restrict to static hash-return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com