超级算子的奇怪行为

Fer*_*ata 6 raku

我发现了超级操作员的这种奇怪行为:

\n
say 0 != 0;                 # False\n\nmy @a = 0, 0, 0;\nsay @a \xc2\xab==\xc2\xbb @a;             # [True True True]\nsay @a \xc2\xab!=\xc2\xbb @a;             # [True True True] <--- why?\nsay @a \xc2\xab!==\xc2\xbb @a;            # [False False False]\n
Run Code Online (Sandbox Code Playgroud)\n

中缀运算符在这里!=定义为等价于 !==,但显然它不是,至少在超级运算符中使用时是这样。

\n

该问题似乎与特定值(零)有关,因为使用不同的值会返回预期结果。\n此外,使用0 but True工作正常:

\n
@a = 0 but True, 0 but True, 0 but True;\nsay @a \xc2\xab!=\xc2\xbb @a;             # [False False False]\n
Run Code Online (Sandbox Code Playgroud)\n

我正在使用 Rakudo 2022.03。

\n

这是一个错误还是我无法理解的东西?

\n

Eli*_*sen 6

这绝对是一个错误,如下所示:

my @a = 0, 0, 0;
say HYPER(&infix:<<!=>>, @a, @a);  # [False False False]
Run Code Online (Sandbox Code Playgroud)

给出正确的结果。然而,传递给的HYPER不是而是&infix:<<!=>>一个显然包装它的代码块(错误地)。

进一步调查,但是请,是的,这是一个错误,因此应该报告:-)

编辑: https: //github.com/rakudo/rakudo/issues/4838

编辑: https: //github.com/rakudo/rakudo/pull/4839修复它,但我不确定它修复它的方式:-)

编辑:修复已由 jnthn 批准,合并。将于2022.04。感谢您的关注!