Ruby 不管#hash和#eql,结果都为零?在哈希中查找密钥时,计算结果是否为true?

Ruby 不管#hash和#eql,结果都为零?在哈希中查找密钥时,计算结果是否为true?,ruby,Ruby,我想知道,根据#eql,当我放入一个数组(这是散列的键)时,为什么这个ruby散列的计算结果是nil?以及检查哈希值是否相等 some_arr = [1] => [1] my_hash = { some_arr => "value" } => {[1]=>"value"} my_hash[some_arr] => "value" some_arr << 2 => [1, 2] my_hash[some_arr] => nil my_hash

我想知道,根据#eql,当我放入一个数组(这是散列的键)时,为什么这个ruby散列的计算结果是nil?以及检查哈希值是否相等

some_arr = [1]
=> [1]
my_hash = { some_arr => "value" }
=> {[1]=>"value"}
my_hash[some_arr]
=> "value"
some_arr << 2
=> [1, 2]
my_hash[some_arr]
=> nil
my_hash
=> {[1, 2]=>"value"}
即使不使用数组[1,2]也会给出以下值:

my_hash[[1,2]]
=> nil

在这种情况下,您的哈希将过时。使用
rehash
解决您的问题

my_hash.rehash

有关为什么需要
rehash
的一些解释,请参阅此相关内容。值得注意的是,如果您使用对象作为密钥,您不应该因为这个原因在事后篡改密钥,但如果您这样做,B-M有解决方案。您的答案可以通过解释为什么需要执行
rehash
,来改进,尽管@muistooshort提供的链接可以帮你做到这一点。
my_hash[[1,2]]
=> nil