# [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
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
2
3
4
5
6
7
ハッシュが配列に変換されて帰ってくるんですね。ブロックパラメータを一つしかとらないeachメソッドはハッシュではなく配列のメソッドなので、ハッシュだったhogeが勝手に配列に変換されたうえで処理されたんですね。動的型変換とダックタイピングは恐ろしい。これ有効に使いこなせるようになる日は来るのかな。
この程度のことばっかで詰まっているので何も進みません。わからないことがわからない。クビになるんちゃうかな。おわり。