You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何显式使用Perl子程序参数的默认值?

Raku子程序默认值调用的惯用写法

场景与问题

我们定义了如下子程序:

sub test($arg = 'default value') { say $arg }

想要传入一个可能未定义的变量,让子程序使用参数的默认值。尝试了以下写法,但无法达到预期:

my $undefined-value;
test $undefined-value // Nil; # 无效,输出"Nil"

自己找到一个可行但略显粗糙的写法:

test |($undefined-value // Empty); # 有效,输出"default value"

符合惯用风格的解决方案

最地道的写法是使用**? 占位符**,代码更简洁直观:

test $undefined-value // ?;

或者保留你找到的思路,写法本身其实也符合惯用风格,只是可以明确它的作用:

test |($undefined-value // Empty);

为什么之前的写法无效?

  • 传入Nil时,子程序会将Nil作为明确的参数值接收,不会触发默认值——默认值仅在未传递对应参数时生效。
  • Empty是Raku的空序列,通过|展开空序列,相当于没有传递该位置的参数,此时子程序就会启用预设的默认值。
  • ? 是Empty的语法糖,专门用于这种“跳过参数、使用默认值”的场景,是Raku社区推荐的惯用写法。

内容的提问来源于stack exchange,提问作者fingolfin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:31:03