我发现了超级操作员的这种奇怪行为:
\nsay 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]\nRun Code Online (Sandbox Code Playgroud)\n中缀运算符在这里!=定义为等价于 !==,但显然它不是,至少在超级运算符中使用时是这样。
该问题似乎与特定值(零)有关,因为使用不同的值会返回预期结果。\n此外,使用0 but True工作正常:
@a = 0 but True, 0 but True, 0 but True;\nsay @a \xc2\xab!=\xc2\xbb @a; # [False False False]\nRun Code Online (Sandbox Code Playgroud)\n我正在使用 Rakudo 2022.03。
\n这是一个错误还是我无法理解的东西?
\n这绝对是一个错误,如下所示:
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。感谢您的关注!
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |