Type:
Class
Implements a hash where keys :foo
and
"foo"
are considered to be the same.
rgb = ActiveSupport::HashWithIndifferentAccess.new rgb[:black] = '#000000' rgb[:black] # => '#000000' rgb['black'] # => '#000000' rgb['white'] = '#FFFFFF' rgb[:white] # => '#FFFFFF' rgb['white'] # => '#FFFFFF'
Internally symbols are mapped to strings when used as keys in the entire
writing interface (calling []=
, merge
, etc). This
mapping belongs to the public interface. For example, given:
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)
You are guaranteed that the key is returned as a string:
hash.keys # => ["a"]
Technically other types of keys are accepted:
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1) hash[0] = 0 hash # => {"a"=>1, 0=>0}
but this class is intended for use cases where strings or symbols are the
expected keys and it is convenient to understand both as the same. For
example the params
hash in Ruby on Rails.
Note that core extensions define Hash#with_indifferent_access
:
rgb = { black: '#000000', white: '#FFFFFF' }.with_indifferent_access
which may be handy.