对于以下多子脚本:
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;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Ambiguous call to 'Screen_get_valid_string';
these signatures all match:
:($prompt, $accept_empty_string, $max_length = 999)
:($prompt, $max_length = 999)
Run Code Online (Sandbox Code Playgroud)
我发现有一个正确的多子调用的唯一方法是使用命名参数:
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 = …Run Code Online (Sandbox Code Playgroud) 对于只包含Str元素的Array,我可以使用grep(Str)来消除a:delete之后的空槽;
例如:
my @prov_cd = <AB BC MB NB NL NS ON PE QC SK>;
@prov_cd[2]:delete; # Manitoba deleted
@prov_cd; # [AB BC (Any) NB NL NS ON PE QC SK]
my @prov_cd_cleanup = @prov_cd.grep(Str); # get rid of (Any) empty slot: [AB BC NB NL NS ON PE QC SK]
@prov_cd = @prov_cd_cleanup; # [AB BC NB NL NS ON PE QC SK]
Run Code Online (Sandbox Code Playgroud)
Array可以包含各种对象类型; 我宁愿"grep"所有不是(任何)的东西.
我怎样才能做到这一点 ?
谢谢.