==演算子は、Objectクラスではequal?メソッドと同じ意味に過ぎず、2個のオブジェクト参照が等しいかどうかをテストする。これは次と等しい。
a.object_id == b.object_id
しかし、ほとんどのクラスでは、インスタンスは別でも値が等しいかどうかをテストできるように定義しなおされている。
a = "Ruby"
b = "Ruby" # 内容は同じだが別のStringオブジェクト
a.equal?(b) # false: aとbは同一のオブジェクトではない
a == b # true: しかし、2つの異なるオブジェクトは同じ値を持っている
Javaは2つのオブジェクトが同一オブジェクトかどうかをテストするときには==演算子、2つの別々のオブジェクトが同じ値かどうかをテストする時にはequalsメソッドを使う習慣になっているため、ちょうど逆である。
プログラミング言語 Ruby 第2刷 80ページ より
2011/04/27 追記
参考: Rubyリファレンス日記
0 件のコメント:
コメントを投稿