我有一个数组,以下测试返回true:
1 ~~ @a
然而,以下测试返回false:
@a ~~ 1
我在 Learning Perl 中读到,智能匹配运算符两侧的值的放置无关紧要,但显然在上面的代码中它是这样的。这是为什么?这两个陈述是否检查了不同的内容?
答案 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,你可以看到它的内容完全不同,具体取决于其参数的顺序和类型。