Bib*_*rma 16 ruby hash ruby-on-rails activesupport
Ruby Hash
和ActiveSupport有什么区别HashWithIndifferentAccess
?动态哈希哪个最好?
小智 26
下面是一个简单的例子,它将向您展示简单的ruby哈希和"ActiveSupport :: HashWithIndifferentAccess"之间的区别
简单的Ruby哈希
$ irb
2.2.1 :001 > hash = {a: 1, b:2}
=> {:a=>1, :b=>2}
2.2.1 :002 > hash[:a]
=> 1
2.2.1 :003 > hash["a"]
=> nil
Run Code Online (Sandbox Code Playgroud)
::的ActiveSupport HashWithIndifferentAccess
2.2.1 :006 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2)
NameError: uninitialized constant ActiveSupport
from (irb):6
from /home/synerzip/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'
2.2.1 :007 > require 'active_support/core_ext/hash/indifferent_access'
=> true
2.2.1 :008 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2)
=> {"a"=>1, "b"=>2}
2.2.1 :009 > hash[:a]
=> 1
2.2.1 :010 > hash["a"]
=> 1
Run Code Online (Sandbox Code Playgroud)
在 Ruby 哈希中:
hash[:key]
hash["key"]
Run Code Online (Sandbox Code Playgroud)
是不同的。在HashWithIndifferentAccess
顾名思义,您可以访问key
两种方式。
引用官方文档对此:
实现一个散列,其中键 :foo 和 "foo" 被认为是相同的。
和
在整个编写界面(调用 []=、merge 等)中用作键时,内部符号会映射到字符串。此映射属于公共接口。例如,给定:
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)
您可以保证密钥作为字符串返回:
hash.keys # => ["a"]