如何在签名中声明可选参数?
How do I declare an optional parameter in a signature?
假设我有
use v5.026;
use feature 'signatures';
sub foo ($opt1, $opt2) {
say $opt1 if $opt2;
}
main::foo(1,2);
main::foo(1);
现在我想在有和没有 opt2 的情况下调用 foo
:
foo(1); # not currently accepted
foo(1,2); # works fine
带有子例程签名的可选参数需要定义的默认值,这是通过 = default_value_expression
完成的。您可以将其硬设置为 undef
:
sub foo ($opt1, $opt2 = undef) {
say $opt1 if $opt2;
}
您还可以通过以数组结尾的签名来允许任意数量的可选参数,这将吞噬任何剩余的参数并且也不允许任何值,就像正常的数组赋值一样。
sub foo ($opt1, @opts) {
假设我有
use v5.026;
use feature 'signatures';
sub foo ($opt1, $opt2) {
say $opt1 if $opt2;
}
main::foo(1,2);
main::foo(1);
现在我想在有和没有 opt2 的情况下调用 foo
:
foo(1); # not currently accepted
foo(1,2); # works fine
带有子例程签名的可选参数需要定义的默认值,这是通过 = default_value_expression
完成的。您可以将其硬设置为 undef
:
sub foo ($opt1, $opt2 = undef) {
say $opt1 if $opt2;
}
您还可以通过以数组结尾的签名来允许任意数量的可选参数,这将吞噬任何剩余的参数并且也不允许任何值,就像正常的数组赋值一样。
sub foo ($opt1, @opts) {