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

Raku中带引号键的Pair传入Slurpy Hash触发参数数量错误

Raku中带引号键的Pair传递触发参数错误的原因与解决方法

核心问题:Pair的传递类型差异

Raku里=>操作符的解析逻辑会根据左侧值的形式变化:

  • 当左侧是裸标识符(比如bar),bar => 'BAR!'会自动把标识符转为字符串作为Pair的键,同时这个Pair会被识别为命名参数,被子程序的*%bar(slurpy hash)捕获,所以调用成功。
  • 当左侧是带引号的字符串(比如'$bar'),'$bar' => 'BAR!'生成的Pair会被当作普通位置参数传递。而你的子程序slurpy-hash只定义了一个位置参数$foo,多余的位置参数就触发了“Too many positionals passed”错误。

错误信息解读

提示里的“预期1个参数”指的是位置参数的数量。*%bar是用来捕获额外命名参数的slurpy hash,不属于位置参数范畴,所以子程序要求的位置参数只有$foo这一个。当你传入两个位置参数('FOO!'和那个带引号键的Pair),自然会超出预期。

解决方法:显式声明带特殊字符的命名参数

如果要传递包含$这类特殊字符的键作为命名参数,需要用Raku的命名参数语法明确标记:

# 写法1:冒号加括号包裹键
slurpy-hash('FOO!', :('$bar')('BAR!'));

# 写法2:冒号加引号键的简写形式
slurpy-hash('FOO!', :'$bar'('BAR!'));

修改后执行结果会正常输出:

FOO!
{$bar => BAR!}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 21:12:32