LoginSignup
0
0

More than 5 years have passed since last update.

Rubyで深いHashが書きまくれるやつが欲しくなった

Last updated at Posted at 2019-02-09

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"}}}}}

階層構造を変数にしてそのまま渡せるのでなんかわかりやすいかもと思ったけど、
使い所が思い浮かばなかった。

おわり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0