RubyでHashの分割代入をしたい

  • このエントリーをはてなブックマークに追加

Rubyで分割代入をしたい。values_atを使えば出来そう。

1
2
3
4
5
6
h = { :a => 1, :c => 2 }
a, b, c = h.values_at(:a, :b, :c)

# a = 1
# b = nil
# c = 2

さらにRuby2.7では pattern match を使ってNestしたHashもいけるみたい。
ただ、pattern matchは試験実装なので使うとwarningが出ます。

1
2
3
4
5
6
7
8
9
h = { :a => 1, :b => 10 }
h in {a:, b:}
# a = 1
# b = 10

h = { :a => { :b => 100 }}
h in {a:{b:}}
# a => undefined
# b = 100

参考