В чем разница между == и =: = в Erlang при использовании с терминами в целом? - PullRequest
18 голосов
/ 20 марта 2012

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

1> 1=:=1.0.
false

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

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

Ответы [ 2 ]

25 голосов
/ 21 марта 2012

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

0 голосов
/ 12 июля 2013

Eshell V5.9.3.1 (отмена с ^ G)
1> 1,0 == 1.
true
2> 1.0 =: = 1.
false
3>

см.? При нажатии на «==» эти два элемента будут переведены в один и тот же формат для соответствия.когда "=: =" нет, когда два элемента имеют одинаковый тип и одинаковое значение будет возвращать true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...