初始化哈希两次和清除有什么区别?

时间:2016-01-18 05:20:25

标签: ruby hash

假设我有一个hash = {1=>1,2=>2}来清除我可以hash = {}hash.clear执行的值。他们之间有什么区别?

3 个答案:

答案 0 :(得分:1)

根据docs,如果您看到clear方法的源代码,它会遍历散列中的每个元素并将其删除。

执行hash = {}时,它只会创建一个新的空哈希对象,但如果该对象没有其他引用,旧对象仍将在内存中准备好进行垃圾回收。

答案 1 :(得分:1)

他们完全不同。

第一个将简单地将局部变量hash绑定到另一个对象。特别是,它会“清除值”,正如您声称的那样:

hash = {i: 'am', still: 'there'}
another = hash

hash = {}

another
# => {i: 'am', still: 'there'}

第二个实际清除值:

hash = {i: 'am', still: 'there'}
another = hash

hash.clear

another
# => {}

答案 2 :(得分:0)

Atri的答案是正确的,但是当你使用重新分配时仍然存在于GC的内存中的Hash - 如果数组仍然被另一个变量实际引用。

哈希是一个对象,变量只是一个指针或对它的引用。 #clear清除对象本身,重新分配变量只是将变量指向一个新的哈希。

hash1 = {1=>1,2=>2}
hash2 = hash1
puts hash1 # => {1=>1,2=>2}
puts hash2 # => {1=>1,2=>2}
hash1 = {}
puts hash1 # => {}
puts hash2 # => {1=>1,2=>2}

hash1 = {1=>1,2=>2}
hash2 = hash1 
hash1.clear
puts hash1 # => {}
puts hash2 # => {}