2012-03-20 14 views

答えて

21

=:=の最大の利点は、パターンマッチングと同じ方法で同じ用語に対してのみ真を返すことです。あなたは彼らが同じであることを確認することができます。 11は同じ用語で、11.0はありません。それでおしまい。 foo(A, B) when A =:= B -> A.bar(A, B) when A =:= B -> B.のような関数を書くと、同じように動作します。 ==を使用すると、同じ機能にはなりません。単に驚きを防ぐだけです。たとえば、キー/値の保存を行う場合、キー1を使用して値を保存してから、キー1.0を要求する場合はこの値を取得することは正しくありません。そして、はい、==で少しのパフォーマンスのペナルティがありますが、最も驚くべきことははるかに重要です。同じ用語を比較するつもりであれば、=:==/=を使用してください。数値を比較する場合は、==/=を使用してください。

+1

だから、最後は浮動小数点数とintを比較することです。 intと浮動小数点の間にある項がある場合、=:=は正確な数学を保証します。しかし、intと浮動小数点を除けば、==と=:=の間にそれ以上の違いはありません。他のタイプでは、==思いやりは厳密です。 – Ricardo

+0

@リカルド:それは正しいです。 – Fylke

+2

@リカルド:はい、いいえ。これは言葉で遊んでいると見ることができますが、この例を想像してみましょう:A = {foo、[bar、1]}、B = {foo、[bar、1.0]}、true = A == B、false = A = := B'技術的には、AとBは明らかに数字ではなく、オペランド '=='と '=:=/2'は同じ動作をしませんが、あなたは正しいです。それは私が厳密に私の答えの中で言葉を話している理由です。 –

0

Eshell V5.9.3.1(abort with^G)
1> 1.0 == 1。
true
2> 1.0 =:= 1。

3>

はそれを参照してください? それが一致するように同じ形式に2つの要素をtranferます「==」に行くとき。 "=:="の場合、2つの要素が同じ型で同じ値がtrueを返す場合は使用しないでください。

関連する問題