- 52 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 10:52:06 ]
- >>50
Rubyはそのへんただのメソッドで、各々のクラスのメソッド定義で動作が自由に変わる それぞれのクラスのそれぞれのメソッドのマニュアル読め 一般的には euqal? は Object#equal? そのままで ObjectID の同一性を比較する eql? は多くの場合 Object#eql? そのままで「オブジェクトのハッシュ値」の同一性を比較する オブジェクトのハッシュ値は Object#hashで、再定義されることも多い(通常は ObjectID) == は多くの場合クラスごとに再定義され、そのクラス固有の同一性判定(「意味上同じっぽい」かどうか)を行う a = URI.parse("example.com/") と b = URI.parse("EXAMPLE.com/") は object_id が違うので equal? は偽を返す eql? は #hash の値が内部表現の配列の hash に再定義されてて、 内部配列的にはハッシュ同等ではないので真を返す ['http', 'example.com', '/'].hash == ['http', 'EXAMPLE.com', '/'].hash が偽 == はこれも再定義されてて、ホストが大文字でも小文字でも規格上は同一とみなさなければならないので そのように細工された上で何らかの手段で比較されて真を返す というわけで、Rubyではその手の問答は向かない
|

|