2012-03-20 13 views

Respuesta

21

La mayor ventaja de =:= es que devuelve verdadero solo para los mismos términos del mismo modo que la coincidencia de patrones. Entonces puedes estar seguro de que son iguales. 1 y 1 son los mismos términos y 1 con 1.0 no lo son. Eso es. Si escribe funciones como foo(A, B) when A =:= B -> A. y bar(A, B) when A =:= B -> B., se comportarán igual. Si usa ==, no tendrá las mismas funciones. Simplemente evita la sorpresa. Por ejemplo, si realiza algún almacenamiento de clave/valor, no sería correcto si almacena el valor con la clave 1 y luego obtiene este valor si solicita la clave 1.0. Y sí, hay un poco de penalización de rendimiento con ==, pero el asombro es mucho más importante. Solo use =:= y =/= cuando intente comparar los mismos términos. Use == y /= solo si su intención es comparar números.

+1

Entonces, al final, se trata de comparar ints con flotadores, ¿no? Si tiene un término con enteros y flotantes dentro, =: = garantiza una matemática exacta. Pero aparte de los enteros y las carrozas, no hay más diferencias entre == y =: =, ¿son el? Quiero decir, con otros tipos, la compasión == es exacta. – Ricardo

+0

@Ricardo: Eso es correcto. – Fylke

+2

@Ricardo: Sí y no. Se puede ver como jugar con las palabras, pero imagine este ejemplo: 'A = {foo, [bar, 1]}, B = {foo, [bar, 1.0]}, verdadero = A == B, falso = A = : = B' Entonces, técnicamente hablando, "A" y "B" no son números, obviamente, y los operandos "==" y "=: =/2" no se comportan igual, pero usted tiene razón, la diferencia se vuelve con los números. Es por eso que estoy hablando estrictamente de términos en mi respuesta. –

0

Eshell V5.9.3.1 (abortar con^G)
1> 1.0 == 1.
true
2> 1.0 =: = 1.
falsa
3>

lo ven? cuando vaya con "==" se tranfer los dos elementos en el mismo formato para que coincida. cuando "=: =" no, cuando los dos elementos son del mismo tipo y el mismo valor devolverá verdadero.

Cuestiones relacionadas