2012-03-20 9 views

risposta

21

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.

+1

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

+0

@ Ricardo: è corretto. – Fylke

+2

@ 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. –

0

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

vedono? quando andare con "==" sarà tranfer i due elementi nello stesso formato di per abbinare. quando "=: =" no, quando i due elementi sono dello stesso tipo e lo stesso valore restituirà true.

Problemi correlati