# [Ruby]ネストされたハッシュのeachメソッドと動的型変換

2019/04/21

最近Ruby on Railsを勉強しています。何もわからん。その一環で掲題の件で3日くらい詰まったことがあったのでメモしておきます。

こんなネストされたハッシュがあったとします。

hoge = { ho: { a: 1, b: 2 }, ge: { a: 3, b: 4 } }
1

このハッシュをeachメソッドで順々に取り出して処理したいとします。ハッシュクラスのeachメソッドはブロックを取り、その際のブロックパラメータはハッシュのキーとバリューの2つを取ります。

hoge.each do |k, v|
  p k
  p v[:a]
end

#=>
:ho
1
:ge
3
1
2
3
4
5
6
7
8
9
10

ここで、eachメソッドのブロックパラメータを間違えて一つしかとらないように書いてしまったとします。するとこうなる。

hoge.each do |k|
  p k
end

#=>
[:ho, {:a=>1, :b=>2}]
[:ge, {:a=>3, :b=>4}]
1
2
3
4
5
6
7

ハッシュが配列に変換されて帰ってくるんですね。ブロックパラメータを一つしかとらないeachメソッドはハッシュではなく配列のメソッドなので、ハッシュだったhogeが勝手に配列に変換されたうえで処理されたんですね。動的型変換とダックタイピングは恐ろしい。これ有効に使いこなせるようになる日は来るのかな。

この程度のことばっかで詰まっているので何も進みません。わからないことがわからない。クビになるんちゃうかな。おわり。