最近Ruby on Railsを勉強しています。何もわからん。その一環で掲題の件で3日くらい詰まったことがあったのでメモしておきます。
こんなネストされたハッシュがあったとします。
hoge = { ho: { a: 1, b: 2 }, ge: { a: 3, b: 4 } }
このハッシュをeachメソッドで順々に取り出して処理したいとします。ハッシュクラスのeachメソッドはブロックを取り、その際のブロックパラメータはハッシュのキーとバリューの2つを取ります。
hoge.each do |k, v| p k p v[:a] end #=> :ho 1 :ge 3
ここで、eachメソッドのブロックパラメータを間違えて一つしかとらないように書いてしまったとします。するとこうなる。
hoge.each do |k| p k end #=> [:ho, {:a=>1, :b=>2}] [:ge, {:a=>3, :b=>4}]
ハッシュが配列に変換されて帰ってくるんですね。ブロックパラメータを一つしかとらないeachメソッドはハッシュではなく配列のメソッドなので、ハッシュだったhogeが勝手に配列に変換されたうえで処理されたんですね。動的型変換とダックタイピングは恐ろしい。これ有効に使いこなせるようになる日は来るのかな。
この程度のことばっかで詰まっているので何も進みません。わからないことがわからない。クビになるんちゃうかな。おわり。