🐥

ActiveSupport::HashWithIndifferentAccess は Symbol でのパターンマッチに対応している

に公開

よくよく考えたら当たり前な挙動な気もするんですが知らなかったので覚書。
ActiveSupport::HashWithIndifferentAccess ではキーで要素にアクセスする際に StringSymbol を区別せずにアクセスすることが可能です。

require "active_support/all"

user = ActiveSupport::HashWithIndifferentAccess.new(name: "homu", age: 14)

# #inspect はキーが String になっているが
pp user # => {"name" => "homu", "age" => 14}

# String でも Symbol でも取得することができる
pp user["name"] # => "homu"
pp user["age"]  # => 14

pp user[:name] # => "homu"
pp user[:age]  # => 14

また、以下のようにパターンマッチでも利用することができます。

require "active_support/all"

user = ActiveSupport::HashWithIndifferentAccess.new(name: "homu", age: 14)

case user
in { name:, age: }
  puts "name is #{name}, age is #{age}"
  # => name is homu, age is 14
end

便利ですね。

GitHubで編集を提案

Discussion