Hash から文字列でもシンボルでも値を取り出す
Hash から文字列でもシンボルでも値を取り出す
先日のプルリクでhashの文字列とシンボルで取り出す実装をそれぞれ分けていたら、コメントで「with_indifferent_access」を利用してください。というコメントが....
なんだwith_indifferent_accessとは?と思い調べてみました。
with_indifferent_access
結論から言うと、Hash から文字列でもシンボルでも値を取り出す事が出来るメソッドです。
Ruby の Hash は key が文字列かシンボルかどうかを区別するので、文字列の場合は文字列のみ取得し、シンボルの場合はシンボルのみ取得します。
hash = {hoge: '俺'} hash[:hoge] #=> "俺" hash['hoge'] #=> nil hash = { 'hoge' => '俺'} hash[:hoge] #=> nil hash['hoge'] #=> "俺"
ただ、key が文字列かシンボルか意識しなくても value を取り出したいケースもありますよね。
その時に利用するのがwith_indifferent_accessメソッドになります。
require 'active_support' require 'active_support/core_ext' sugoi_hash = {hoge: '俺'}.with_indifferent_access sugoi_hash[:yuno] #=> "俺" sugoi_hash['yuno'] #=> "俺"