2

我最近了解到您可以使用数组作为哈希键

Ruby 是如何做到这一点的?

  • 数组指针是哈希键吗?
  • 还是array_instance 的object_id?
  • 或者是其他东西?
4

2 回答 2

5

它不是指针或object_id. Ruby 允许您将数组视为值,因此包含相同元素的两个数组产生相同的hash值。

来,看:

arr1 = [1, 2]
arr2 = [1, 2]

# You'll see false here
puts arr1.object_id == arr2.object_id

# You'll see true here
puts arr1.hash == arr2.hash

hash = {}
hash[arr1] = 'foo'
hash[arr2] = 'bar'

# This will output {[1, 2] => 'bar'},
# so there's only one entry in the hash
puts hash

HashRuby 中的类使用hash对象的方法来确定其作为键的唯一性。这就是为什么arr1并且arr2在上面的代码中可以互换(作为键)。

于 2013-09-20T22:06:27.873 回答
2

从文档:

当两个对象的哈希值相同并且两个对象eql?相互关联时,它们引用相同的哈希键。

好的,有什么作用Array#eql?

如果 self 和 other 是同一个对象,或者都是具有相同内容的数组(根据 Object#eql?),则返回 true

于 2013-09-20T22:06:19.960 回答