提交 5071b727 编写于 作者: P Piotr Sarnacki

Added Hash#deep_dup function which performs deep duplication on given hash

上级 cfbe5958
require 'active_support/core_ext/hash/conversions'
require 'active_support/core_ext/hash/deep_merge'
require 'active_support/core_ext/hash/deep_dup'
require 'active_support/core_ext/hash/diff'
require 'active_support/core_ext/hash/except'
require 'active_support/core_ext/hash/indifferent_access'
......
class Hash
# Returns a deep copy of hash.
def deep_dup
duplicate = self.dup
duplicate.each_pair do |k,v|
tv = duplicate[k]
duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v
end
duplicate
end
end
......@@ -316,6 +316,21 @@ def test_deep_merge_on_indifferent_access
assert_equal expected, hash_1
end
def test_deep_dup
hash = { :a => { :b => 'b' } }
dup = hash.deep_dup
dup[:a][:c] = 'c'
assert_equal nil, hash[:a][:c]
assert_equal 'c', dup[:a][:c]
end
def test_deep_dup_initialize
zero_hash = Hash.new 0
hash = { :a => zero_hash }
dup = hash.deep_dup
assert_equal 0, dup[:a][44]
end
def test_store_on_indifferent_access
hash = HashWithIndifferentAccess.new
hash.store(:test1, 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册