Il più grande vantaggio di =:=
è che restituisce true solo per gli stessi termini allo stesso modo della corrispondenza del modello. Quindi puoi essere sicuro che siano uguali. 1
e 1
sono gli stessi termini e 1
con 1.0
no. Questo è tutto. Se si scrivono funzioni come foo(A, B) when A =:= B -> A.
e bar(A, B) when A =:= B -> B.
, si comportano allo stesso modo. Se usi ==
non saranno le stesse funzioni. Semplicemente previene la sorpresa. Ad esempio, se si crea un archivio chiave/valore non sarebbe corretto se si memorizza il valore con la chiave 1
e quindi si ottiene questo valore se si richiede la chiave 1.0
. E sì, c'è un po 'di penalità sulle prestazioni con lo ==
, ma meno lo stupore è molto più importante. Basta usare =:=
e =/=
quando si intende confrontare gli stessi termini. Utilizzare ==
e /=
solo se si intende confrontare i numeri.
fonte
2012-03-20 23:51:24
Quindi, alla fine, si tratta solo di confrontare gli interi contro i galleggianti, no? Se hai un termine con ints e float all'interno, =: = garantisce una matematica esatta. Ma a parte gli interi e i float, non ci sono più differenze tra == e =: =, sono i? Voglio dire, con altri tipi la == compassione è esatta. – Ricardo
@ Ricardo: è corretto. – Fylke
@ Ricardo: Sì e no. Può essere visto come un gioco con le parole, ma immagina questo esempio: 'A = {pippo, [bar, 1]}, B = {pippo, [barra, 1.0]}, vero = A == B, falso = A = : = B' Quindi tecnicamente parlando 'A' e' B' non sono numeri ovviamente e operands '==' e '=: =/2' non si comportano allo stesso modo, ma hai ragione, la differenza diventa con i numeri. È per questo che sto parlando rigorosamente di termini nella mia risposta. –