🐥
ActiveSupport::HashWithIndifferentAccess は Symbol でのパターンマッチに対応している
よくよく考えたら当たり前な挙動な気もするんですが知らなかったので覚書。
ActiveSupport::HashWithIndifferentAccess ではキーで要素にアクセスする際に String と Symbol を区別せずにアクセスすることが可能です。
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
便利ですね。
Discussion