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