Ruby的Hash
和ActiveSupport的HashWithIndifferentAccess
有什么区别?哪个是最适合动态哈希的?Ruby的哈希和ActiveSupport的Hash之间的区别WithIndifferentAccess
回答
下面是简单的例子,会告诉你简单的区别ruby hash & a“ActiveSupport :: HashWithIndifferentAccess”
个- HashWithIndifferentAccess允许我们访问哈希键作为符号或字符串
简单的Ruby的Hash
$ 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
的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
- class HashWithIndifferentAccess继承自ruby“Hash”&以上的特殊行为被添加进来。
在Ruby哈希:
hash[:key]
hash["key"]
是不同的。顾名思义,在HashWithIndifferentAccess
中,您可以以任何方式访问key
。
引述官方documentation这样:
实现,其中键的哈希:foo和 “富” 被认为是 相同。
和
在内部作为 整个写入接口键(呼叫[] =,合并,等)一起使用时的符号被映射到的字符串。该映射 属于公共接口。例如,给定:
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)
您是 保证关键是返回一个字符串:
hash.keys # => ["a"]
我认为在HashWithIndifferentAccess的情况下,在整个写入接口(调用[] =,merge等)中用作键时,符号被映射到字符串。这样对吗? –
是的。内部符号在整个写入界面(调用[] =,合并等)中用作键时映射到字符串。该映射属于公共接口。 – shivam
- 1. 一致哈希和锥哈希之间的区别是什么?
- 2. ActiveSupport中mattr_accessor和cattr_accessor之间的区别?
- 3. set和hash之间的区别?
- 4. Oracle和tomcat md5哈希之间的区别?
- 5. 字典和哈希表之间的真正区别是什么?
- 6. 哈希克尔派生和实例之间的区别
- 7. 哈希映射,哈希集合,哈希字典之间有什么区别?
- 8. 找出哈希和数组之间的变量类别和区别
- 9. For和Ruby之间的区别
- 10. Ruby 1.8.6和1.8.7之间的区别?
- 11. Ruby中+和<<之间的区别
- 12. rubygem guard和grunt.js之间的区别?
- 13. powershell和ruby之间的区别
- 14. Ruby和C之间的主要区别
- 15. ruby和python之间的语法区别?
- 16. Ruby - 变量和@variable之间的区别
- 17. Perl中的哈希和哈希引用有什么区别?
- 18. 在Perl中,if(%hash)和if(定义的%hash)之间有什么区别?
- 19. Python和其他文件哈希之间的MD5哈希差异
- 20. 红宝石/哈希:的ActiveSupport :: HashWithIndifferentAccess
- 21. bsddb:哈希格式,btree格式和记录格式之间的区别
- 22. Laravel Un Hash哈希值?
- 23. '+ ='和'= +'之间的区别?
- 24. {!!之间的区别!!}和{{}}
- 25. ==和case之间的区别?
- 26. '#','%'和'$'之间的区别
- 27. | =和^ = css之间的区别
- 28. “%〜dp0”和“。\”之间的区别?
- 29. .eq之间的区别。和==
- 30. ==和.equals()之间的区别?
完美的例子 –