2011-03-12 11 views
9

tengo una matriz para la cual la prueba siguiente devuelve verdadero:¿Por qué Smartmatch devuelve valores diferentes según el orden de los operandos?

1 ~~ @a 

Y, sin embargo, la siguiente prueba devuelve falso:

@a ~~ 1 

leí en Learning Perl que la colocación de los valores en ambos lados del operador de Smartmatch no importa, pero obviamente en el código anterior lo hace. ¿Porqué es eso? ¿Las dos declaraciones revisan cosas diferentes?

+1

http://www.learning-perl.com/?p=32 – Hugmeir

+0

¡Estupendo! Gracias por el enlace. –

Respuesta

13

Además de las otras respuestas, the list of Perl 5.10.1 changes tiene una sección sobre los cambios realizados en el operador ~~:

El operador partido inteligente ~~ ya no es conmutativa. El comportamiento de una coincidencia inteligente ahora depende principalmente del tipo de su argumento de la mano derecha.

Así Learning Perl puede haber sido correcta antes de estos cambios.

+5

En realidad también cambió en 5.10.1. –

5

Si Learning Perl dice eso, es mal obsoleta (aunque tiende a trabajar de esa manera, en muchos casos). Lo que hace el operador de concordancia inteligente está determinado principalmente por el tipo del argumento correcto; vea la tabla en the perlsyn documentation para detalles.

+1

Era correcto cuando fue escrito :) –

+0

@Brian Roach: Hah, acabo de leer eso en perl5101delta mientras intento averiguar qué exactamente '@a ~~ 1' hace. – Anomie

5

Puede ver que hace cosas muy diferentes dependiendo del orden y los tipos de sus argumentos si va al Smart Matching in Detail.

11

La versión de ~~ en 5.10.0 se basó en el diseño actual de perl6, que era conmutativa. Debido a que 5.10.0 tardó tanto en ser lanzado, cuando salió, el perl6 smartmatch había mejorado mucho (incluso ya no era conmutativo), pero nadie en desarrollo perl5 se dio cuenta a tiempo para arreglar la implementación de perl5. Se corrigió en 5.10.1, y nadie debería confiar en las antiguas reglas 5.10.0. Es nuevo para mí que el comportamiento inconsistente se documentó en un libro impreso.

Cuestiones relacionadas