Difference between equal to and exactly equal to term comparison operators解释了区别,但一个重要的问题是:当我不将浮动与其他东西进行比较时,我应该使用哪一个?
“实用编程Erlang”推荐=:=并且说你应该对==持怀疑态度,并且只在处理浮点数时使用它。但是它也说很多现有的代码都不遵循这个规则。
所以我有点困境。我应该使用“==”(即使不将浮点数与其他值进行比较)与周围代码保持一致吗?我是否应该使用“=:=”,即使这与文件的其余部分不一致?我应该将文件中的其他表达式转换为使用“=:=”吗?
有什么权衡?运营商是否比其他运营商更有效?如果保证其中一个操作数不是数字,那么我使用哪个操作数是否重要?是否没有隐藏的陷阱(例如,wrt。特殊浮点值,如NaN,Inf等...... - 以防Erlang支持这些)。
顺便说一句,我面临的代码库是ejabberd。答案 0 :(得分:6)
如果您不需要将整数与浮点数进行比较,请使用=:=。性能是相同的(或者至少差异太小而无法测量),并且在Erlang中不存在NaN,inf等。
使用大量OTP库代码==的原因可能是因为=:=是Erlang的新增功能。