超级操作员的奇怪行为
Strange behavior of a hyperoperator
我发现超级操作者的这种奇怪行为:
say 0 != 0; # False
my @a = 0, 0, 0;
say @a «==» @a; # [True True True]
say @a «!=» @a; # [True True True] <--- why?
say @a «!==» @a; # [False False False]
!=
中缀运算符被定义为 here 等同于 !== 虽然显然不是,至少在超级运算符中使用时是这样。
问题似乎与特定值(零)有关,因为使用不同的值 returns 预期结果。
此外,使用 0 but True
效果很好:
@a = 0 but True, 0 but True, 0 but True;
say @a «!=» @a; # [False False False]
我正在使用 Rakudo 2022.03。
这是错误还是我无法理解?
这绝对是一个错误,如下所示:
my @a = 0, 0, 0;
say HYPER(&infix:<<!=>>, @a, @a); # [False False False]
给出了正确的结果。但是,传递给 HYPER
的是 而不是 &infix:<<!=>>
,而是一个显然(错误地)包装它的代码块。
正在进一步调查,但是,是的,这是一个错误,因此应该报告 :-)
编辑:https://github.com/rakudo/rakudo/issues/4838
编辑:https://github.com/rakudo/rakudo/pull/4839 修复了它,但我不确定它修复它的方式:-)
编辑:修复已被 jnthn 批准,合并。将于2022.04。感谢您的关注!
我发现超级操作者的这种奇怪行为:
say 0 != 0; # False
my @a = 0, 0, 0;
say @a «==» @a; # [True True True]
say @a «!=» @a; # [True True True] <--- why?
say @a «!==» @a; # [False False False]
!=
中缀运算符被定义为 here 等同于 !== 虽然显然不是,至少在超级运算符中使用时是这样。
问题似乎与特定值(零)有关,因为使用不同的值 returns 预期结果。
此外,使用 0 but True
效果很好:
@a = 0 but True, 0 but True, 0 but True;
say @a «!=» @a; # [False False False]
我正在使用 Rakudo 2022.03。
这是错误还是我无法理解?
这绝对是一个错误,如下所示:
my @a = 0, 0, 0;
say HYPER(&infix:<<!=>>, @a, @a); # [False False False]
给出了正确的结果。但是,传递给 HYPER
的是 而不是 &infix:<<!=>>
,而是一个显然(错误地)包装它的代码块。
正在进一步调查,但是,是的,这是一个错误,因此应该报告 :-)
编辑:https://github.com/rakudo/rakudo/issues/4838
编辑:https://github.com/rakudo/rakudo/pull/4839 修复了它,但我不确定它修复它的方式:-)
编辑:修复已被 jnthn 批准,合并。将于2022.04。感谢您的关注!