gpt4 book ai didi

raku - 如何声明一个接受类型化数组参数的函数

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

假设我要声明一个函数,其参数为字符串数组:

sub process-string-array(Str[] stringArray) # invalid
{
...
}
我该怎么做?

最佳答案

这取决于您要使用的标记:

sub process-string-array(Str        @array) { ... }  # @-sigil
sub process-string-array(Array[Str] $array) { ... } # $-sigil
请注意,您必须小心地传入已声明的Str数组来执行此操作,这意味着adhoc数组将需要使用类型化声明来传入:
my Str @typed-array = <a b c>;
process-string-array <a b c>; # errors
process-string-array @typed-array; # typed array in
process-string-array Array[Str].new: <a b c>; # adhoc typed array
如果您不想处理这样的类型化数组,则可以使用 where子句接受恰好仅包含 Any元素(通常更易于使用IME)的任何 Str类型化数组:
sub process-string-array(@array where .all ~~ Str) { ... }
但是,这(如jnthn在注释中提醒的那样)要求对每个元素进行类型检查(因此O(n)perf与O(1)),因此,根据对性能的敏感程度,可能值得考虑额外的代码噪声。根据Brad的建议,您可以对其进行 multi编码,以便在键入数组时加快处理速度,而在不输入数组时回退到较慢的方法。
multi sub process-string-array(Int @array) { 
... # actual processing here
}
multi sub process-string-array(@array where .all ~~ Str) {
process-string-array Array[Int].new: @array
}

关于raku - 如何声明一个接受类型化数组参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65522337/

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