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.
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
@Ricardo: Eso es correcto. – Fylke
@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. –