Difference between equal to and exactly equal to term comparison operators wyjaśnia różnicę, ale ważne pytanie brzmi także: z którego należy korzystać, gdy nie porównuję pływaków z innymi rzeczami?, którego z == i =: = powinienem użyć?
„Pragmatyczne programowania Erlang” zaleca =: = i mówi powinno być podejrzane o == i używać go tylko wtedy, gdy do czynienia z pływaków. Jednak mówi również, że wiele istniejącego kodu nie przestrzega tej reguły.
Więc mam mały dylemat. Czy powinienem używać "==" (nawet jeśli nie porównuje wartości zmiennoprzecinkowe z innymi wartościami) w celu zachowania zgodności z otaczającym kodem? Czy powinienem użyć "=: =" odpowiednio, nawet jeśli byłoby to niezgodne z resztą pliku? Czy należy przekonwertować inne wyrażenia w pliku, aby użyć "=: ="?
Jakie są kompromisy? Czy którykolwiek z operatorów jest bardziej wydajny niż inny? Jeśli jeden z operandów nie jest gwarantowany, czy ma znaczenie, którego używam? Czy nie ma żadnych ukrytych pułapek (powiedzmy, wrt. Specjalne wartości zmiennoprzecinkowe, takie jak NaN, Inf itd. - w przypadku, gdy Erlang je obsługuje).
BTW kodzie mam skierowane jest ejabberd.
Cóż, =: = jest opisane w pierwszym wydaniu (1993) "Programowania współbieżnego w Erlang", strona 30. Jeśli to dla ciebie ostatnie, możesz być dłużej niż ja :-) – RichardC
W każdym razie tak , zwykle należy używać = = =, ponieważ jest to ten sam test równości, który jest wykonywany przy dopasowywaniu wzorców. Używanie ==, gdy nie potrzebujesz arytmetycznej równości, może wprowadzać subtelne błędy, a także może wymuszać na dializerze założenie, że dane mogą być unoszone, nawet jeśli wiesz, że powinny to być tylko liczby całkowite. – RichardC