Ruby 初心者スレッド Part 35
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
50:デフォルトの名無しさん 10/03/05 10:32:07 等値についていまいちわかりません。 (等価(同値)はWikipediaを見て理解しました。) Rubyだと以下のどれがどれなんでしょう? 1. object_id が一致 ex. 1.equal? 1 #=> true 1.0.equal? 1.0 #=> false 2. クラスが一致 + 値が一致 ex. 1.0.eql? 1.0 #=> true 1.eql? 1.0 #=> false 3. クラス不一致 + 値が一致 ex. 1 == 1.0 #=> true 4. 比較して大小つかず ex. 1 <=> 1.0 #=> 0 元ネタはZDNet Japanの記事「プログラマーの力量を見極める」 ttp://japan.zdnet.com/sp/feature/07tenthings/story/0,3800082984,20409456,00.htm です。 51:デフォルトの名無しさん 10/03/05 10:50:00 >>49 BASICのほうのPコードはMS用語。pseudocodeのことらしい。 52:デフォルトの名無しさん 10/03/05 10:52:06 >>50 Rubyはそのへんただのメソッドで、各々のクラスのメソッド定義で動作が自由に変わる それぞれのクラスのそれぞれのメソッドのマニュアル読め 一般的には euqal? は Object#equal? そのままで ObjectID の同一性を比較する eql? は多くの場合 Object#eql? そのままで「オブジェクトのハッシュ値」の同一性を比較する オブジェクトのハッシュ値は Object#hashで、再定義されることも多い(通常は ObjectID) == は多くの場合クラスごとに再定義され、そのクラス固有の同一性判定(「意味上同じっぽい」かどうか)を行う a = URI.parse("http://example.com/") と b = URI.parse("http://EXAMPLE.com/") は object_id が違うので equal? は偽を返す eql? は #hash の値が内部表現の配列の hash に再定義されてて、 内部配列的にはハッシュ同等ではないので真を返す ['http', 'example.com', '/'].hash == ['http', 'EXAMPLE.com', '/'].hash が偽 == はこれも再定義されてて、ホストが大文字でも小文字でも規格上は同一とみなさなければならないので そのように細工された上で何らかの手段で比較されて真を返す というわけで、Rubyではその手の問答は向かない
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5082日前に更新/211 KB
担当:undef