9
votes

Pourquoi SmartMatch retourne-t-il des valeurs différentes selon l'ordre des opérandes?

J'ai un tableau pour lequel le test suivant renvoie true: xxx

et pourtant, le test suivant renvoie false: xxx

J'ai lu apprendre Perl que le placement des valeurs de part et d'autre de l'opérateur SmartMatch n'a pas d'importance, mais évidemment dans le code ci-dessus, il fait. Pourquoi donc? Les deux déclarations vérifient-elles différentes choses?


4 Réponses :


5
votes

Si apprendre Perl dit que, c'est faux obsolète (bien qu'il a tendance à travailler de cette façon dans de nombreux cas). Ce que l'opérateur de correspondance intelligente est principalement déterminé par le type du bon argument; Voir la table dans La documentation PerlSyn pour des détails.


1 commentaires

@Brian Roach: Hah, je viens de lire cela à Perl5101Delta tout en essayant de déterminer ce que @a ~~ 1 fait exactement.



5
votes

Vous pouvez voir qu'il fait des choses très différentes en fonction de la commande et des types de ses arguments si vous allez sur Smart correspondant en détail .


0 commentaires


11
votes

La version de ~~ in 5.10.0 était basée sur la conception de Perl6 actuelle, qui était commutative. Parce que 5.10.0 a pris si longtemps à être libéré, au moment de sa sortie, le Perl6 SmartMatch avait été grandement amélioré (n'incluant plus la commutative), mais personne du développement de PERL5 remarqua à temps pour réparer la mise en œuvre de PERL5. Il a été fixé en 5.10.1 et personne ne devrait compter sur les plus âgés de 5,10,0 règles. C'est une nouvelle pour moi que le comportement incompatible a été documenté dans un livre imprimé.


0 commentaires