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

如何让Raku自定义中缀运算符直接传递Whatever而非生成WhateverCode?

解决Raku中Whatever对象被解析为WhateverCode的问题

问题分析

你定义的自定义中缀运算符<-_->期望接收Whatever对象和5作为参数,但* -_- 5会被Raku解析为构建WhateverCode闭包,而非直接传递Whatever对象,导致输出不符合预期。

解决方案

要让*以Whatever对象的形式传入运算符,需要明确告诉解析器这是一个单独的Whatever实例,有两种可行方法:

方法1:用括号包裹*

通过括号强制将*解析为独立表达式:

sub infix:<-_->(*@args) is assoc("list") { @args.raku }

say (*) -_- 5

方法2:直接使用Whatever类型名

显式调用Whatever单例(Raku中该类型为单例,直接用类型名即可获取实例):

sub infix:<-_->(*@args) is assoc("list") { @args.raku }

say Whatever -_- 5

运行结果

两种方法的输出均为:

[Whatever, 5]

原因说明

Raku的语法规则中,当*出现在二元运算符的左侧操作数位置时,会优先触发WhateverCode的解析逻辑——它会将*视为闭包的占位符,生成一个接收参数并应用运算符的匿名函数。通过括号或显式类型名,可以打破这个优先级,让*被解析为单独的Whatever单例对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:15:56