6

equal to と equal to term 比較演算子の違いは違いを説明していますが、重要な質問は、float を他のものと比較しない場合、どちらを使用すべきかということです。

"Pragmatic Programming Erlang" は =:= を推奨しており、== を疑うべきであり、フロートを扱う場合にのみ使用すべきであると述べています。ただし、既存のコードの多くがこのルールに従っていないとも書かれています。

だから私は少しジレンマがあります。周囲のコードとの一貫性を保つために、(float を他の値と比較しない場合でも) "==" を使用する必要がありますか? これがファイルの残りの部分と矛盾する場合でも、「=:=」を適切に使用する必要がありますか? ファイル内の他の式を「=:=」を使用するように変換する必要がありますか?

トレードオフは何ですか?どちらのオペレーターが他のオペレーターよりも効率的ですか? オペランドの 1 つが数値ではないことが保証されている場合、どちらを使用しても問題はありませんか? 隠されたトラップはありませんか (たとえば、NaN、Inf などの特別な float 値について - Erlang がこれらをサポートしている場合)。

ところで、私が直面しているコードベースは ejabberd です。

4

1 に答える 1

6

int と float を比較する必要がない場合は、=:= を使用します。パフォーマンスは同じ (または少なくとも差が小さすぎて測定できない) で、Erlang には NaN や inf などは存在しません。

多くの OTP ライブラリ コードで == が使用されている理由は、おそらく =:= が Erlang に比較的最近追加されたためです。

于 2012-05-21T14:00:27.150 に答える