假设我有一个hash = {1=>1,2=>2}
来清除我可以hash = {}
或hash.clear
执行的值。他们之间有什么区别?
答案 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 # => {}