2012-05-21 18 views
6

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.

Odpowiedz

5

Zastosowanie =: = jeśli nie trzeba porównać ints z pływaków. Wydajność jest taka sama (lub przynajmniej różnica jest zbyt mała, aby zmierzyć) i NaN, inf itp nie istnieją w Erlang.

Powodem dużo OTP kodzie biblioteki wykorzystywane == to prawdopodobnie dlatego, =: = jest raczej ostatni dodatek do Erlang.

+2

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

+1

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

Powiązane problemy