Rubyの深いハッシュ、例えば地球>日本>東京>目黒区>大岡山は
{
earth: {
japan: {
tokyo: {
meguro: {
o_okayama: {
# something
}
}
}
}
}
}
こういう感じのHashになって、{}
を書くことに疲れてしまいそうとおもった。
ネストしたHashを書きまくれるN
というクラスを定義してみた
class N < Hash
def initialize(*args)
return self if args.length == 0
key = args.shift
case args.length
when 0
self[key] = nil
when 1
self[key] = args.first
else
self[key] = N.new(*args)
end
end
end
oookayama = %i(earth japan tokyo meguro o_okayama)
#=> [:earth, :japan, :tokyo, :meguro, :o_okayama]
N.new(*oookayama, 'something')
#=> {:earth=>{:japan=>{:tokyo=>{:meguro=>{:o_okayama=>"something"}}}}}
階層構造を変数にしてそのまま渡せるのでなんかわかりやすいかもと思ったけど、
使い所が思い浮かばなかった。
おわり。