gpt4 book ai didi

signature - Perl6;多子

转载 作者:行者123 更新时间:2023-12-02 22:56:24 26 4
gpt4 key购买 nike

对于以下多子脚本:

multi sub Screen_get_valid_string($prompt, $accept_empty_string, $max_length = 999) { return "abc" }
multi sub Screen_get_valid_string($prompt, $max_length = 999) { return "def" }

my $return = Screen_get_valid_string("enter value for string => ", True);

say 'return is ', $return;

我收到以下错误:

Ambiguous call to 'Screen_get_valid_string';
these signatures all match:
:($prompt, $accept_empty_string, $max_length = 999)
:($prompt, $max_length = 999)

我发现调用正确的 multi sub 的唯一方法是使用命名参数:

multi sub Screen_get_valid_string(:$prompt, :$accept_empty_string, :$max_length = 999) { return "abc" }
multi sub Screen_get_valid_string(:$prompt, :$max_length = 999) { return "def" }


my $return = Screen_get_valid_string(prompt => "enter value for string => ", accept_empty_string => True);

say 'return is ', $return;

结果是:

return  is abc

谢谢

附:使用 Perl5; Perl6 新手

最佳答案

您收到的错误是因为您设置了默认值。因此解析器不知道您是否要求

$prompt = "enter value for string => "
$accept_empty_string = True
$max_length = 999

或者

$prompt = "enter value for string => "
$max_length = True

如果没有类型提示,就无法仅从位置来判断这两个选项中哪一个是正确的。添加类型会有帮助(正如 JJ Merelo 所建议的)。您还可以混合和匹配位置参数和命名参数,这在这种情况下可能会有所帮助:

sub Screen_get_valid_string( $prompt, 
:$max_length = 999,
:$accept_empty_string = False )

在这种情况下,您不需要多用途。 $prompt 始终是必需的,另外两个是具有默认值的标志。

我最近在 LPM 上做了一次关于签名的各种选项的演讲,它可能会有所帮助。

https://www.youtube.com/watch?v=obYlOurt-44

当然,你可以全力以赴:

sub Screen_get_valid_string( Str() $prompt, 
Int :$max_length = 999,
Bool :$accept_empty_string = False )

请注意,Str() 接受任何强制转换为 Str 的内容。

关于signature - Perl6;多子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260249/

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