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

Ikr*_*ani 9 perl smartmatch

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

1 ~~ @a
Run Code Online (Sandbox Code Playgroud)

然而,以下测试返回false:

@a ~~ 1
Run Code Online (Sandbox Code Playgroud)

我在Learning Perl中读到,智能匹配运算符两侧的值的放置并不重要,但显然在上面的代码中它确实如此.这是为什么?这两个陈述是否检查了不同的内容?

Qui*_*ith 13

除了其他答案之外,Perl 5.10.1更改列表还有一个关于对~~运算符所做更改的部分:

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

因此,在进行这些更改之前,学习Perl可能是正确的.

  • 实际上它也在5.10.1中有所改变. (5认同)

yst*_*sth 11

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


Ano*_*mie 5

如果学习Perl说的话,那就是过时的错误(尽管在许多情况下确实会以这种方式解决).智能匹配运算符的作用主要取决于正确参数的类型; 有关详细信息,请参阅perlsyn文档中的表.


Jon*_*ler 5

如果您进入Smart Matching in Detail,您可以看到它的功能完全不同,具体取决于其参数的顺序和类型.