2011-04-09 10 views

Respuesta

1

I THNK que, intuitivamente, match, o el método relacionado =~, expresa una especie de igualdad, como se refleja en el hecho de que =~ incluye la igualdad = y las relaciones de equivalencia ~ (no en rubí, pero en matemáticas). Pero no es totalmente una relación de equivalencia, y entre los tres axiomas de igualdad (reflexividad, conmutatividad, transitividad), particularmente , la conmutatividad parece razonable para ser mantenida en esta relación; es natural que un programador espere que string.match(regex) o string =~ regex signifique lo mismo que regex.match(string) o regex =~ string. Yo mismo, tendría problemas para recordar si alguno está definido y no el otro. De hecho, algunas personas sienten extraño que el método ===, que también nos recuerda algún tipo de igualdad, no es conmutativa, y ha planteado question s.

4

Además de colgar objetos diferentes (lo que a veces hace que sea más conveniente llamar a uno en lugar de al otro), son lo mismo. La justificación es que ambos son útiles y uno a veces es más conveniente que el otro.

+2

No me gusta esa justificación (probablemente no haya una mejor que "están allí, así que vive con ella"). Ambos son útiles porque ambos tienen el * mismo * uso. Se puede argumentar que la existencia de uno hace que el otro sea inútil. –

+1

Excepto que no tienen el mismo uso. Simplemente tienen usos muy similares. En cualquier caso, no estoy convencido de que requieran justificación. Si realmente desea una característica de lenguaje de Ruby que necesita justificación (y carece de ella), busque 'for ... in ...' loops. –

+2

¿Entonces no son lo mismo? ¿Puedes mejorar tu respuesta para reflejar eso? –