ruby_オブジェクトの比較_イコール_3等号_equal_eql

2586 ワード


caseを見ていると、3等号==オペレータに遭遇し、詳細を確認する必要があります.
 
equal?
2つのオブジェクトを比較することが多く,Rubyでは複数のオブジェクトを比較する方法が提供されている.私たちはequalを通じて?メソッドは、2つのオブジェクトが同じかどうかを比較します.これにより、2つの値が同じオブジェクトの参照を指しているかどうかを比較します.例:
a = "Ruby"       #        。
b = c = "Ruby"   #               。
a.equal?(b)      # false: a b      。
b.equal?(c)      # true: b c       。

この比較方式は実際には2つのオブジェクトのIDが同じかどうかを比較するものであり、明らかにaは1つのオブジェクトであり、bとcは別のオブジェクトを指し、それらのオブジェクトIDは異なる.
a.object_id == b.object_id   #     a.equal?(b)

==オブジェクトが等しいかどうかを比較する
彼の役割とequal?方法は異なり、2つのオブジェクトの内容が同じかどうかを比較します.
a="Ruby"#文字列オブジェクトを定義
b = "Ruby"    #    a     ,          
a.equal?(b)   # false: a b       
a == b        # true:          

文字列に加えて、配列と辞書クラスは==オペレータを定義し、2つの配列または2つの辞書オブジェクトの要素の個数が同じで、各要素が同じである場合、==trueを返します.
Numericsオブジェクトは比較時に簡単な最新変換を行うため、Fixnumタイプの1とFloatタイプの1.0の比較結果は等しい.
同様に、あなたは使用することができます!=2つのオブジェクトが等しくないかどうかを判断します.
eql?方法
Rubyはeqlも提供していますか?メソッド、equalと?の機能は同じで、もっと精錬した書き方です.
3つの等号の比較操作==
通常、この方法は==と同じですが、特定の場合、===には特別な意味があります.
Rangeで===等号の右側のオブジェクトが等号の左のRangeに含まれているかどうかを判断するために使用されます.
正規表現では、文字列がパターンに一致するかどうかを判断するために使用されます.
Class定義==は、オブジェクトがクラスのインスタンスであるかどうかを判断します.
Symbol定義==は、等号の両方のシンボルオブジェクトが同じかどうかを判断します.
(1..10) === 5 # true: 5  range 1..10
/\d+/ === "123"  # true:          
String === "s"   # true: "s"           
:s === "s"       # true 

コメント:
煩わしいのはjavaが正反対だ.よく考えてみると、==値を比較するのは合理的です.これは使い道が多く、頻度が高いからです.
ソース:http://blogruby.blogspot.com/2008/10/22.html
====完了===
I
I
I
!
I
I
I