为什么smartmatch根据操作数的顺序返回不同的值?

时间:2011-03-12 00:37:29

标签: perl smartmatch

我有一个数组,以下测试返回true:

1 ~~ @a

然而,以下测试返回false:

@a ~~ 1

我在 Learning Perl 中读到,智能匹配运算符两侧的值的放置无关紧要,但显然在上面的代码中它是这样的。这是为什么?这两个陈述是否检查了不同的内容?

4 个答案:

答案 0 :(得分:13)

除了其他答案之外,the list of Perl 5.10.1 changes还有一个关于~~运营商所做更改的部分:

  

智能匹配运算符~~不再是可交换的。智能匹配的行为现在主要取决于其右手参数的类型。

因此,在进行这些更改之前, Learning Perl 可能是正确的。

答案 1 :(得分:11)

5.10.0中的~~版本基于当时的perl6设计,该设计是可交换的。由于5.10.0需要很长时间才能发布,到它出现时,perl6 smartmatch已经大大改进(包括不再是可交换的),但perl5开发中没有人及时注意到修复perl5的实现。它在5.10.1中得到修复,没有人应该依赖旧的5.10.0规则。这对我来说是个不一致的行为记录在一本印刷书中。

答案 2 :(得分:5)

如果 Learning Perl 这样说,它的错误已经过时了(尽管在许多情况下确实会以这种方式解决)。智能匹配运算符的作用主要取决于正确参数的类型;请参阅the perlsyn documentation中的表格了解详情。

答案 3 :(得分:5)

如果你转到Smart Matching in Detail,你可以看到它的内容完全不同,具体取决于其参数的顺序和类型。