抱歉标题混乱,不知道如何描述这个问题。
在 Ruby on Rails 控制器中,我创建了一个名为 的列表@commits
,其中的每个项目@commits
都应包含一个哈希表,其元素是每个提交的各种属性的值。这些属性值存储在 Redis 数据库中。
下面,我遍历了一个属性列表,这些属性的值应该从 Redis 中获取,然后为 8 个不同的提交中的每一个获取这些值。然后,我将 redis 中的值放入每个提交的不同哈希表中,使用提交属性名称作为哈希的键。
# Initialize @commits as a list of eight empty hash tables
@commits = Array.new(8, {})
# Iterate over the attributes that need hashed for each item in @commits
[:username, :comment, :rev, :repo].each do |attrib|
# 8 items in @commits
8.times do |i|
# Get a value from redis and store it in @commits[i]'s hash table
@commits[i][attrib] = $redis.lindex(attrib, i)
# Print the value stored in the hash
# Outputs 7, 6, .., 0 for @commits[i][:rev]
puts @commits[i][attrib].to_s
end
end
# Print the value of every item that was stored in the hash tables above,
# but only for the :rev key
# Outputs 0 eight times
8.times do |i|
puts @commits[i][:rev]
end
然而,根据上面的评论,@commits[0..7] 似乎在它们的哈希值中都有相同的值,尽管它们在上面几行似乎被正确存储。以哈希键:rev
为例,第一个puts
输出 7..0 是正确的,但是第二个puts
输出了 8 次数字 0。
有谁知道为什么?