当我运行下面的内容时,我得到了
false
false
作为输出。我希望这样做:
false
true
true
代码:
a = Object.new
b = Object.new
my_hash = {}
my_hash['one'] = [a, b]
my_hash['two'] = [b]
my_hash.each do |key, value|
puts value == b
end
迭代器中“value”中引用的对象似乎与“a”和“b”相同。为什么呢?
答案 0 :(得分:3)
代码将数组(散列值)与对象b
进行比较。
您应该比较每个数组项目以获得预期结果:
a = Object.new
b = Object.new
my_hash = {}
my_hash['one'] = [a, b]
my_hash['two'] = [b]
my_hash.each do |key, array|
array.each do |item| # <---
puts item == b
end # <---
end
outupt:
false
true
true
答案 1 :(得分:1)
在散列上调用each
不会迭代作为值的数组。
所以my_hash.each
正在有效运行:
[a, b] == b #=> false
[b] == b #=> false