トップ «前の日記(2008-05-17) 最新 次の日記(2008-05-19)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2008-05-18

_ この動作は仕様として正しいのかな?

Hashのキーはeql?で比較するという点と、hashメソッドの戻り値を利用する、というのは良いのだが、Arrayのインスタンスを使うとなぜ取得できないことがあるんだ?
irb(main):035:0> a = [1]
=> [1]
irb(main):036:0> h = { a => 1 }
=> {[1]=>1}
irb(main):037:0> h[a]
=> 1
irb(main):038:0> h[[1]]   # aと[1]は異なるインスタンスだがeql?なので値が取得できる(はず)
=> 1
irb(main):039:0> a << 1
=> [1, 1]
irb(main):040:0> h[a]   # eql?が満たされなくなったからかな?
=> nil
irb(main):041:0> h.keys[0].eql? a
=> true                           # eql?は満たされている
irb(main):042:0> h.keys[0].hash == a.hash
=> true                           # hashの値も等しい
irb(main):043:0> h[[1,1]]
=> nil                              # ふむ
irb(main):044:0> h.keys[0].eql? [1,1]
=> true                           # なぜだ
irb(main):045:0> h.keys[0].hash == [1,1].hash
=> true
追記:ああ、テーブル上のスロットが変わるからだ。いちいちキーをチェックしたらハッシュじゃないし。
ってことは
irb(main):192:0> h[[1]]   # 今度はハッシュが等しいので正しいスロットをポイントする
=> nil   # しかし残念、キーとeql?じゃない
ということか。納得。

_ チェチェチェチェンジス

関係ないが。

Changes(David Bowie)

どうも、映画館かテレビかどっちかでPV使った広告を観たことがあるな。すごく印象に残っているってことが、サビの部分を聴いて思い出した。

変なところで図書館戦争にぶつかって、なんか世の中のトピックってのは狭いもんだとかも思ったり。

本日のツッコミ(全4件) [ツッコミを入れる]
_ shachi (2008-05-18 04:06)

どんどん、BaseBallBearにはまってるようで、古参ファンとしてうれしい限りww

_ yowa (2008-05-18 05:09)

ちなみに Hash#rehash でハッシュの再計算ができます。

_ arton (2008-05-18 10:50)

>はまってる<br>気に入る気に入らないってのは微妙でおもしろいですね。確かにはまってるなぁ。<br>>refash<br>確かにそうでした。もっともキーを変更してrehashするのは本末転倒ですね。if hash.length * 3 > hash.size then hash.rehashとかかなぁ。

_ arton (2008-05-18 12:41)

読み返したらわけのわからないこと書いてるな>おれ


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|

ジェズイットを見習え