Подтвердить что ты не робот

В чем разница между == и =: = в Erlang при использовании с терминами вообще?

Кроме того, что =:= предотвращает нежелательные целые нажатия:

1> 1=:=1.0.
false

В чем преимущество использования =:= с терминами вообще?

Лучшая производительность?

4b9b3361

Ответ 1

Самое большое преимущество =:= заключается в том, что он возвращает true только для тех же терминов, что и для сопоставления с образцом. Поэтому вы можете быть уверены, что они такие же. 1 и 1 - те же термины, а 1 с 1.0 - нет. Это. Если вы пишете функцию типа foo(A, B) when A =:= B -> A. и bar(A, B) when A =:= B -> B., они будут вести себя одинаково. Если вы используете ==, это не будут те же функции. Это просто предотвращает неожиданность. Например, если вы создадите некоторое хранилище ключей/значений, это будет неправильно, если вы сохраните значение с помощью ключа 1, а затем получите это значение, если запросите ключ 1.0. И да, есть небольшое снижение производительности с ==, но наименьшее удивление гораздо важнее. Просто используйте =:= и =/=, когда вы намерены сравнивать одинаковые термины. Используйте == и /= только в том случае, если вы намерены сравнивать числа.

Ответ 2

*Eshell V5.9.3.1  (abort with ^G)   
1> 1.0==1.   
true   
2> 1.0=:=1.  
false  

Когда мы перейдем к ==, он переведет оба элемента в один и тот же формат для соответствия. С =:= этого не происходит - когда два элемента имеют одинаковый тип и одинаковое значение, он возвращает true.