Hashの参照をするとき、シンボルか文字列の違いを気にしない

August 02, 2022

これは何?

SSIA

Rails コンソールで実行

$ rails c
Loading development environment (Rails 6.0.4.6)
irb(main):001:0> x1 = {a:2, b:3}
=> {:a=>2, :b=>3}
irb(main):002:0> x1[:a]
=> 2
irb(main):003:0> x1['a']
=> nil
irb(main):004:0> x1.class
=> Hash
irb(main):005:0> x2 = {'a'=>2, 'b'=>3}
=> {"a"=>2, "b"=>3}
irb(main):006:0> x2[:a]
=> nil
irb(main):007:0> x2['a']
=> 2
irb(main):008:0> x2.class
=> Hash

Hash のままでは、シンボルで参照した時、文字列と参照した時で区別されてることが分かります。

irb(main):009:0> x3 = {'a'=>2, 'b'=>3}.with_indifferent_access
=> {"a"=>2, "b"=>3}
irb(main):010:0> x3[:a]
=> 2
irb(main):011:0> x3['a']
=> 2
irb(main):012:0> x3.class
=> ActiveSupport::HashWithIndifferentAccess

with_indifferent_access を使うことによって、シンボルでも文字列でも参照できるようになりました。

参考


SHARE

Profile picture

Written by tamesuu