咨询Signature类命名参数别名示例运行结果异常的原因
问题原因与解答
你遇到的现象由两点Raku语法特性共同导致:
- 你给出的签名
sub named(:official($private))是Raku「命名参数内外名称不一致」的标准写法:对外暴露的调用参数名为official,参数传入后会赋值给函数内部的$private变量使用,外部无法直接操作$private变量,所有值必须通过official参数传入。 - 你测试时调用的
named :official是Raku命名参数的布尔值简写语法,:参数名固定等价于参数名 => True,所以你只要这么调用,$private拿到的永远是布尔真,自然会一直输出Official business!。
正确测试方式
如果要验证$private为假的逻辑,调用时需要主动传入official参数的假值,有两种合法写法:
- 完整键值对写法:
named official => False - 布尔否定简写:
named :!official
以上两种调用方式下$private都会被赋值为布尔假,函数不会产生输出,符合你的预期。
内容的提问来源于stack exchange,提问作者Keith Hardy
相关产品推荐
相关产品推荐

