Domanda Qual è la differenza tra == e =: = in Erlang se usato con termini in generale?


A parte il fatto che =:= previene i cast indesiderati interi:

1> 1=:=1.0.
false

Qual è il vantaggio dell'uso =:= con termini in generale?

Migliori prestazioni?


15
2018-03-20 16:25


origine


risposte:


Il più grande vantaggio di =:= è 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 non sono. Questo è tutto. Se scrivi 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 ottieni questo valore se chiedi la chiave 1.0. E sì, c'è un po 'di penalità sulle prestazioni con == ma almeno lo stupore è molto più importante. Basta usare =:= e =/= quando è il tuo intento di confrontare gli stessi termini. Uso == e /= solo se è il tuo intento di confrontare i numeri.


21
2018-03-20 23:51



Eshell V5.9.3.1 (abortire con ^ G)
1> 1.0 == 1.
vero
2> 1.0 =: = 1.
falso
3>

Guardalo? quando vai con "==" trasferirà i due elementi nello stesso formato per abbinare. quando "=: =" no, quando i due elementi sono dello stesso tipo e lo stesso valore restituirà true.


0
2017-07-12 03:24